我正在尝试将进程响应为字符串,以便我可以在我的代码中的不同位置使用它,这是我到目前为止的解决方案:
const string ex1 = @"C:\Projects\MyProgram.exe ";
const string ex2 = @"C:\Projects\ProgramXmlConfig.xml";
Process process = new Process();
process.StartInfo.WorkingDirectory = @"C:\Projects";
process.StartInfo.FileName = "MyProgram.exe ";
process.StartInfo.Arguments = ex2;
process.StartInfo.Password = new System.Security.SecureString();
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
try
{
process.Start();
StreamReader reader = process.StandardOutput;
string output = reader.ReadToEnd();
}
catch (Exception exception)
{
AddComment(exception.ToString());
}
但是当我跑步时,我得到了:
"The system cannot find the file specified" error in process.Start(); without process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true;
代码运行正常,但它只是打开控制台窗口,并且所有进程响应都在那里,所以我不能将它用作字符串。
有谁知道我为什么会收到此错误,或者可能是我的问题的其他解决方案?
答案 0 :(得分:14)
我怀疑问题是您指定的文件名是相对于您的工作目录的,并且您希望Process.Start
在启动过程时看到{ - 1}} - 我不会相信当UseShellExecute
为false
时,它会以这种方式运作。尝试只指定要启动的进程的绝对文件名:
process.StartInfo.FileName = @"C:\Projects\MyProgram.exe";
请注意,我还删除了您为FileName
属性分配的字符串末尾的空格 - 这完全有可能导致问题的出现。
答案 1 :(得分:4)
对于System32访问,如果您尝试在x64上运行x86应用程序,则必须在文件名中使用“Sysnative”关键字而不是“System32”。
EG:而不是:
C:\ Windows \ System32下\ whoiscl.exe
应该是:
C:\的Windows \ Sysnative \ whoiscl.exe
希望这有助于某人