2010-02-15 4 views
3

Lorsque je lance le code suivant sur mon ordinateur, il est fonctionne très bienproblème System.Diagnostics.Process.Start « Impossible de trouver le fichier spécifique »

string target = e.Link.LinkData as string; 
target = System.IO.Directory.GetCurrentDirectory() + target; 
System.Diagnostics.Process.Start(target); 

cible - chemin non absolu de fichier. Les fichiers sont existants. lors de l'effacement de l'exception Virtual Machine "Impossible de trouver un fichier spécifique" est généré.

Des suggestions?
Mise à jour
Je souligne que sur mon ordinateur fonctionne très bien. Pourquoi cela ne fonctionne pas sur un autre ordinateur

+2

Documentez soigneusement l'exception que vous obtenez. S'il s'agit d'une exception Win32Exception, nous devons connaître la valeur de sa propriété NativeErrorCode. –

Répondre

2

La première chose que je ferais, pour essayer d'aller au fond de ceci, est de vérifier le chemin exact qui est signalé quand il échoue.

Modifier votre code à quelque chose comme ça (note que j'ai commencé à utiliser Path.Combine comme mentionné par une autre affiche):

string target = e.Link.LinkData as string; 
target = Path.Combine(System.IO.Directory.GetCurrentDirectory() + target); 
var fileInfo = new FileInfo(target); 
if (!fileInfo.Exists) 
{ 
    throw new FileNotFoundException("The requested file was not found: " + fileInfo.FullName); 
} 
System.Diagnostics.Process.Start(target); 

exécuter sur le système qui échoue. Le chemin complet est-il vraiment ce que vous attendiez de lui?

Si non, vous en êtes à la cause.

Si oui, commencez à étudier des choses comme les autorisations. L'utilisateur qui l'exécute est-il autorisé à accéder ou à exécuter le fichier ou le dossier dans lequel il se trouve?

Rétrorez n'importe quelle progression ...

7

Ne jamais concaténer les chemins à l'aide de l'opérateur +. Utilisez Path.Combine() à la place. Cela pourrait aussi être une source de problème.

0

utilisez procmon pour voir quel fichier il essaie d'ouvrir, et comme indiqué précédemment, utilisez Path.Combine pour concaténer vos chemins.

Se pourrait-il que vous ayez un problème de permissions sur l'autre machine, que vous n'avez pas sur votre machine dev? GetCurrentDirectory() n'ajoute pas le caractère "\" à la fin du chemin renvoyé.

+0

Autorisations problème ne correspond pas. Sur l'administrateur de la machine virtuelle, l'utilisateur exécute l'application – zabulus

1

Vous devez l'ajouter vous-même si vous le faites comme ça.

+0

Dans ce cas, la barre oblique à propos de votre saisie est dans la variable cible. – zabulus

1

Peut-être qu'une DLL est manquante? Essayez de charger l'EXE dans Dependency Walker pour voir s'il génère des erreurs (sur votre machine virtuelle).

En outre, la page MSDN pour Process.Start indique que ProcessStart peut générer une exception FileNotFoundException si la variable d'environnement PATH a une chaîne contenant des guillemets.

+0

Exception qui a été levée non FileNotFoundException c'est Win32Exception – zabulus

Questions connexes