Process.Start en C # Le système ne peut pas trouver l’erreur de fichier spécifié

C’est un problème idiot et délicat auquel je suis confronté.

Le code ci-dessous fonctionne bien (il lance la calculasortingce):

ProcessStartInfo psStartInfo = new ProcessStartInfo(); psStartInfo.FileName = @"c:\windows\system32\calc.exe"; Process ps = Process.Start(psStartInfo); 

Cependant celui ci-dessous pour SoundRecorder ne fonctionne pas. Cela me donne l’erreur “Le système ne peut pas trouver le fichier spécifié”.

 ProcessStartInfo psStartInfo = new ProcessStartInfo(); psStartInfo.FileName = @"c:\windows\system32\soundrecorder.exe"; Process ps = Process.Start(psStartInfo); 

Je suis en mesure de lancer Sound Recorder en utilisant la commande Démarrer -> Exécuter -> “c: \ windows \ system32 \ soundrecorder.exe”.

Une idée de ce qui ne va pas?

J’utilise C # dans Visual Studio 2015 et j’utilise Windows 7.

MISE À JOUR 1 : J’ai essayé une vérification File.Exists et elle me montre MessageBox à partir du code ci-dessous:

 if (File.Exists(@"c:\windows\system32\soundrecorder.exe")) { ProcessStartInfo psStartInfo = new ProcessStartInfo(); psStartInfo.FileName = @"c:\windows\system32\soundrecorder.exe"; Process ps = Process.Start(psStartInfo); } else { MessageBox.Show("File not found"); } 

Il est fort probable que votre application est en 32 bits. Dans Windows 64 bits, les références à C:\Windows\System32 sont redirigées de manière transparente vers C:\Windows\SysWOW64 pour les applications 32 bits. calc.exe se trouve que calc.exe existe aux deux endroits, alors que soundrecorder.exe existe soundrecorder.exe dans le vrai System32 .

Lorsque vous lancez à partir de Start / Run le processus parent est le C:\Windows\System32\soundrecorder.exe explorer.exe 64 bits. Aucune redirection n’est donc effectuée. Le C:\Windows\System32\soundrecorder.exe 64 bits est détecté et démarré.

Depuis le redirecteur du système de fichiers :

Dans la plupart des cas, chaque fois qu’une application 32 bits tente d’accéder à% windir% \ System32, l’access est redirigé vers% windir% \ SysWOW64.


[EDIT] De la même page:

Les applications 32 bits peuvent accéder au répertoire système natif en remplaçant% windir% \ SYSNative par% windir% \ System32.

Donc, ce qui suit fonctionnerait pour démarrer soundrecorder.exe partir du (réel) C:\Windows\System32 .

 psStartInfo.FileName = @"C:\Windows\Sysnative\soundrecorder.exe";