【问题标题】:Process.Start(): The system cannot find the file specified, but my file path seems to be legitProcess.Start():系统找不到指定的文件,但我的文件路径似乎是合法的
【发布时间】:2012-04-27 23:39:09
【问题描述】:

这让我难以置信。使用以下代码:

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 目录中。和这有关系吗?

谢谢

【问题讨论】:

    标签: c# process diagnostics du


    【解决方案1】:

    这取决于file system redirector。您将在 64 位机器上运行 32 位进程。这意味着C:\Windows\system32 被透明地重定向到C:\Windows\SysWOW64,我希望在那里找不到du.exe。如果您改用C:\Windows\Sysnative,那么您将能够找到该文件。

    但是,我怀疑您已将 du.exe 添加到系统目录,因为这不是标准的 Windows 组件。你不应该那样做。我建议您将文件放在其他位置,因为您根本不应该在系统目录中写入。

    【讨论】:

    • 我在发布问题和您的答案之间找到了答案。 du.exe 是 32 位可执行文件,并且被错误地放入 system32 而不是 SysWow64。所以,当32位程序去寻找它时,它没有注意到它,因为du.exe在错误的地方。
    • 但是你根本不应该把它放在系统目录中。这是为系统保留的。我相信你可以为你的 unix 工具集找到一个更好的地方。
    • 实际上是 SysInternals du。我同意它不应该在那里,但它存在于几台机器上,所以现在我必须处理它。
    • 它仍然是Unix tool FWIW。不管怎样,看来你已经回到正轨了!
    猜你喜欢
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    相关资源
    最近更新 更多