2016-07-30 10 views
2

Dies ist ein albernes und heikles Thema, mit dem ich konfrontiert bin.Process.Start in C# Das System kann den angegebenen Fehler nicht finden

Der Code unten funktioniert gut (es startet Rechner):

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

Process ps = Process.Start(psStartInfo); 

jedoch die unter einem für Soundrecorder funktioniert nicht. Es gibt mir "Das System kann die angegebene Datei nicht finden" Fehler.

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

Process ps = Process.Start(psStartInfo); 

Ich bin in der Lage Audio-Recorder zu starten, indem Sie über Start -> Ausführen -> "c: \ windows \ system32 \ soundrecorder.exe" -Befehl.

Jede Idee, was schief läuft?

Ich verwende C# in Visual Studio 2015 und Windows 7 OS.

UPDATE 1: Ich habe versucht, eine File.Exists Kontrolle und es zeigt mir MessageBox aus dem unten stehenden Code:

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"); 
} 
+0

Für safetey, den Pfad korrekt großschreiben. '" C: \ Windows \ system32 \ soundrecorder.exe "'. Haben Sie im Explorer nachgesehen, dass die Datei existiert? Was sagt 'File.Exists()' von 'System.IO'? –

+0

beide Codes funktioniert gut für mich. –

+0

Sie könnten ein 'if (File.Exists (@" c: \ windows \ system32 \ soundrecorder.exe ")' machen, um sicherzustellen, dass die Datei vorhanden ist, bevor Sie versuchen, den Prozess zu starten. – Nkosi

Antwort

7

Wahrscheinlich Ihre App ist 32-Bit und 64-Bit-Windows-Verweise auf C:\Windows\System32 get Transparent umgeleitet auf C:\Windows\SysWOW64 für 32-Bit-Anwendungen. calc.exe passiert in beiden Orten, während soundrecorder.exe nur in der echten System32 existiert.

Beim Starten von Start/Run ist der übergeordnete Prozess der 64-Bit explorer.exe, so dass keine Umleitung erfolgt und der 64-Bit C:\Windows\System32\soundrecorder.exe gefunden und gestartet wird.

Von File System Redirector:

In den meisten Fällen, wenn eine 32-Bit-Anwendung versucht,% windir% \ System32 zugreifen zu können, wird der Zugriff auf% windir umgeleitet% \ SysWOW64.


[EDIT] Aus der gleichen Seite:

32-Bit-Anwendungen das native Systemverzeichnis durch Ersetzen% windir% \ Sysnative für% windir% \ System32 zugreifen können.

So folgende funktionieren würde soundrecorder.exe aus den (realen) C:\Windows\System32 zu starten.

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

Interessant! Was ist die Problemumgehung hier? Ich möchte die eingebaute Sound Recorder-Anwendung von meinem C# ausführen – kamleshrao

+1

der SYSNATIVE Trick arbeitete! Danke für Hilfe – kamleshrao

+0

Und hier ist der Microsoft KB-Artikel, der über SYSNATIVE-Dokumentation spricht. Https://support.microsoft.com/en-us/kb/942589 – kamleshrao

Verwandte Themen