C# &引用;系统找不到指定的文件";进程.Start()出错;
我试图让流程以字符串的形式响应,这样我就可以在代码的不同位置使用它,这是我迄今为止的解决方案:C# &引用;系统找不到指定的文件";进程.Start()出错;,c#,process,C#,Process,我试图让流程以字符串的形式响应,这样我就可以在代码的不同位置使用它,这是我迄今为止的解决方案: const string ex1 = @"C:\Projects\MyProgram.exe "; const string ex2 = @"C:\Projects\ProgramXmlConfig.xml"; Process process = new Process(); process.StartInfo.WorkingDirectory = @"C:\P
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());
}
但当我运行这个时,我得到:
代码运行良好,但它只是打开控制台窗口,所有进程响应都在那里,所以我不能将其用作字符串
有人知道我为什么会出现此错误,或者我的问题可能有不同的解决方案吗?我怀疑问题在于您指定的文件名与您的工作目录有关,您希望
Process.Start
在启动流程时查看那里-我认为当UseShellExecute
为false
时,它不会这样工作。尝试只指定要启动的进程的绝对文件名:
process.StartInfo.FileName = @"C:\Projects\MyProgram.exe";
请注意,我还删除了为
FileName
属性指定的字符串末尾的空格-这完全可能也是造成问题的原因。对于System32访问,如果您试图在x64上运行x86应用程序,则必须在文件名中使用“Sysnative”关键字,而不是“System32”
例如:代替:
C:\Windows\System32\whoiscl.exe
应该是:
C:\Windows\Sysnative\whoiscl.exe
希望这对某人有所帮助@DariaShalimov如果这是你问题的答案,mark asanswer@DariaShalimov:答案的分数旁边应该有一个勾号,在左侧-只需单击勾号即可接受答案。您能否更详细地解释为什么将
UseShellExecute
设置为false
会改变WorkingDirectory
的行为?我希望如果我设置了一个工作目录和一个文件名,它将使用该工作目录来执行该文件。@JohnGrabanski:UseShellExecute的文档中:“WorkingDirectory属性的行为因UseShellExecute属性的值而异。当UseShellExecute为true时,WorkingDirectory属性指定可执行文件的位置。如果WorkingDirectory是一个空字符串,则假定当前目录包含可执行文件。“它确实帮助了我!@foxx1337我很高兴它在4年后工作了
process.StartInfo.FileName = @"C:\Projects\MyProgram.exe";