這讓我難以置信。使用下面的代碼:Process.Start():系統找不到指定的文件,但我的文件路徑似乎是合法的
Process du = new Process();
string cmdPath = System.IO.Path.Combine(Environment.SystemDirectory, "du.exe");
Debug.WriteLine(cmdPath);
ProcessStartInfo info = new ProcessStartInfo(cmdPath);
info.CreateNoWindow = true;
info.Arguments = arguments;
info.UseShellExecute = false;
info.RedirectStandardOutput = true;
du.StartInfo = info;
du.EnableRaisingEvents = true;
du.OutputDataReceived += responseParser;
du.Start();
du.BeginOutputReadLine();
du.WaitForExit();
我運行,我也得到:
未處理的異常:System.ComponentModel.Win32Exception:系統找不到指定的文件
雖然cmdPath的輸出值是C:\Windows\system32\du.exe
!
當然,如果我只是在命令提示符下鍵入cmdPath
的內容,它會運行du.exe並給我使用信息。另外,如果我用「du.exe」替換命令路徑,並將du.exe放在工作目錄中,所有工作正常。但我想引用系統位置中的那個。
那麼,這是怎麼回事?據我所知,我有一個合法的文件說明符,但爲什麼不會Process.Start()
執行它?這個基本的代碼也執行其他幾個程序並獲得它們的輸出。其他的都可以正常工作,但是du.exe和它們不同,因爲它在system32目錄中。這與它有什麼關係?
感謝
我想出了問題和答案之間的關係。 du.exe是一個32位可執行文件,並不正確地放在system32而不是SysWow64中。所以,當32位程序去尋找它時,它沒有注意到它,因爲du.exe在錯誤的地方。 – whatsisname 2012-04-27 23:46:42
但是你不應該把它放在系統目錄中。這是爲系統保留的。我相信你可以爲你的unix工具集找到一個更好的地方。 – 2012-04-27 23:47:28
它實際上是SysInternals du。我同意它不應該在那裏,但它在幾臺機器上,所以現在我必須處理它。 – whatsisname 2012-04-27 23:52:46