C# Process.Start(“echo”和“cd%”)抛出未找到的W32异常文件

C# Process.Start(“echo”和“cd%”)抛出未找到的W32异常文件,c#,.net,exception-handling,process.start,C#,.net,Exception Handling,Process.start,当我尝试执行Process.Start(“echo”,“%cd%”)时会引发System.ComponentModel.win32异常:系统找不到指定的文件。 当我在cmd中手动执行此操作时,它会正常工作。我从来不知道有什么不同 另外,当我对一个肯定存在的文件执行File.Exists(logfile.txt)(w/o路径)时,它返回false。顺便说一句,这就是上面出现回声的原因:调试 这个错误不会发生在我的开发机器上,只会发生在我正在测试的另一台机器上 Path变量看起来正常。两者都是Win

当我尝试执行
Process.Start(“echo”,“%cd%”)时
会引发
System.ComponentModel.win32异常:系统找不到指定的文件
。 当我在
cmd
中手动执行此操作时,它会正常工作。我从来不知道有什么不同

另外,当我对一个肯定存在的文件执行
File.Exists(logfile.txt)
(w/o路径)时,它返回false。顺便说一句,这就是上面出现回声的原因:调试

这个错误不会发生在我的开发机器上,只会发生在我正在测试的另一台机器上

Path变量看起来正常。两者都是WinXP。两者都在运行.NET 3.5

尝试
Process.Start(“cmd.exe”,“/c echo%CD%”


就echo而言,它不是一个可执行文件,而是内部的一个命令。

这是因为echo是一个控制台命令,而不是一个应用程序-它不包含在自己的可执行文件中


至于您的文件存在问题,如果您只使用文件名而不使用路径,那么它将在工作目录中查找,这可能与包含正在执行的应用程序的目录不同,与您认为文件应该位于的位置完全不同-您应该在了解应用程序配置后完全限定路径。

如果您想将应用程序的工作目录传递给cmd,可以使用
System.Environment.CurrentDirectory
。AFAIK%CD%是cmd的内部,这就是为什么Process.Start不会扩展它。对于普通环境变量,您可以使用
environment.ExpandEnvironmentVariables

为什么访问文件时没有路径?顺便说一句,您可以通过
环境获取当前工作目录。CurrentDirectory
/C命令:执行指定的命令并返回。对于那些想知道那是什么的人。