如果我转到“开始”>“运行”并输入
C:\folder\Program.exe A=1
我的程序可以运行。
如果我创建 .exe 的快捷方式并编辑属性以将 A=1
附加到目标路径,它也会起作用。
但是如果我尝试运行
var p = new Process();
p.StartInfo.FileName = @"C:\folder\Program.exe";
p.StartInfo.Arguments = "A=1"
p.Start();
或
Process.Start(@"C:\folder\Program.exe, "A=1");
它没有。
这两个调用之间有什么区别,我如何更改我的代码调用以使其运行方式与我在“开始”>“运行”中键入值时的运行方式完全相同?
最佳答案
重新发布评论作为答案(并改写):
与 explorer shell 的 Start->Run 不同,它会自动将当前工作目录设置为目标可执行文件所在的同一文件夹,.NET 的 Process.Start
不会这样做。通常情况下,可执行文件会尝试加载相对于当前工作文件夹的资源,并期望它与可执行文件所在的文件夹相同(例如加载配置文件、DLL 和库等),这会导致崩溃或其他故障。
使用 StartInfo.WorkingDirectory
将工作文件夹指定为可执行文件所在的位置,10 次中有 9 次就是这样!
是的,我有 stepped on this rake more than once ...
关于c# - Process.Start 与“开始”>“运行”有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23817242/