.NET Process.Start默认目录?

Bri*_*uch 106 c#

我正在从C#.NET控制台应用程序内部启动Java应用程序.它适用于Java应用程序不关心"默认"目录是什么的情况,但对于仅搜索当前目录中的支持文件的Java应用程序失败.

是否有一个可以设置的进程参数来指定进程启动的默认目录?

Dro*_*per 171

是! ProcessStartInfo有一个名为WorkingDirectory的属性,只需使用:

...
using System.Diagnostics;
...

var startInfo = new ProcessStartInfo();

  startInfo.WorkingDirectory = // working directory
  // set additional properties 

Process proc = Process.Start(startInfo);
Run Code Online (Sandbox Code Playgroud)

  • +1非常好,正是我想要的. (3认同)

Lar*_*ier 54

使用ProcessStartInfo.WorkingDirectory属性在启动进程之前设置它.如果未设置该属性,则默认工作目录为%SYSTEMROOT%\ system32.

您可以使用以下命令确定%SYSTEMROOT%的值:

string _systemRoot = Environment.GetEnvironmentVariable("SYSTEMROOT");  
Run Code Online (Sandbox Code Playgroud)

下面是一些示例代码,它打开Notepad.exe,其工作目录为%ProgramFiles%:

...
using System.Diagnostics;
...

ProcessStartInfo _processStartInfo = new ProcessStartInfo();
  _processStartInfo.WorkingDirectory = @"%ProgramFiles%";
  _processStartInfo.FileName         = @"Notepad.exe";
  _processStartInfo.Arguments        = "test.txt";
  _processStartInfo.CreateNoWindow   = true;
Process myProcess = Process.Start(_processStartInfo);
Run Code Online (Sandbox Code Playgroud)

还有一个Environment变量控制进程的当前工作目录,您可以直接通过Environment.CurrentDirectory属性访问该目录.


CBB*_*ike 14

试图实现这一点之后,我只是打了个招呼.如果将"UseShellExecute"设置为false,则设置WorkingDirectory值不起作用.

  • 即使在 6 年后,这条关于 UseShellExecute 的评论仍然很有帮助。解决了这个问题。 (3认同)
  • 这并没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时对自己的帖子发表评论,一旦您有足够的 [声誉](http://stackoverflow.com/help/whats-reputation),您将能够[评论任何帖子](http://stackoverflow.com/help/privileges/comment)。 (2认同)

Ben*_*ein 8

使用ProcessStartInfo.WorkingDirectory属性.

文档在这里.


Sim*_*son 6

Process.Start方法有一个重载,它接受ProcessStartInfo的一个实例.该类有一个名为"WorkingDirectory"的属性.

将该属性设置为您要使用的文件夹,并使其在正确的文件夹中启动.