.NET Process.Start默认目录?


114

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

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

Answers:


183

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

...
using System.Diagnostics;
...

var startInfo = new ProcessStartInfo();

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

Process proc = Process.Start(startInfo);

可以WorkingDirectory是相对路径,如果是,则相对路径是相对于当前文件或当前可执行文件的目录?我无法让我的程序找到我要启动的可执行文件。我已经将工作目录设置为exe的目录(相对于当前文件和当前exe),但找不到它。
普希金

56

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

您可以使用以下方法确定%SYSTEMROOT%的值:

string _systemRoot = Environment.GetEnvironmentVariable("SYSTEMROOT");  

这是一些打开工作目录为%ProgramFiles%的Notepad.exe的示例代码:

...
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);

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


很好,我不知道您可以在.WorkingDirectory属性中使用环境变量。
Brain2000 2011年

1
宾果游戏,这就是答案-默认目录为SYSTEMROOT。+1
ashes999 2011年

17

试着实现这一点后,只是一个提示。如果将“ UseShellExecute”设置为false,则无法设置WorkingDirectory值。


1
这不能为问题提供答案。要批评或要求作者澄清,请在其帖子下方留下评论-您可以随时对自己的帖子发表评论,一旦您拥有足够的声誉,就可以在任何帖子中发表评论
Cyclonecode 2014年

1
即使6年后,有关UseShellExecute的评论还是很有帮助的。解决了该问题。
AlanC


6

Process.Start方法具有一个重载,该重载采用ProcessStartInfo的实例。此类具有一个称为“ WorkingDirectory”的属性。

将该属性设置为要使用的文件夹,这应该使它在正确的文件夹中启动。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.