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";