c# - Process.Start 与“开始”>“运行”有何不同?

标签 c# process

如果我转到“开始”>“运行”并输入

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/

相关文章:

c - 信号处理C语言编程

c# - UWP Xaml Textblock 数据绑定(bind) - 即使更新属性,UI 也不更新

c# - 在解决方案中的项目之间共享 PartialView?

process - 操作系统 - 在哪里使用长期调度程序?

memory - 为什么进程的地址空间分为四个段(文本、数据、堆栈和堆)?

带管道的 Scala 进程

c - Fork() 和 Posix 队列。发送和接收字符串

面向经验丰富的函数式程序员的 C# Lambda 和 LINQ 教程

c# - AD 获取具有继承成员资格的组中的用户

c# - 访问路径....被拒绝