.NET Process.Start默认目录?

时间:2008-09-22 13:44:34

标签: c#

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

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

6 个答案:

答案 0 :(得分:168)

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

...
using System.Diagnostics;
...

var startInfo = new ProcessStartInfo();

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

Process proc = Process.Start(startInfo);

答案 1 :(得分:51)

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

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

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

以下示例代码打开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);

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

答案 2 :(得分:12)

在试图实现这个目标后,我只是打了一个笔记。 如果将“UseShellExecute”设置为false,则设置WorkingDirectory值不起作用。

答案 3 :(得分:8)

使用ProcessStartInfo.WorkingDirectory属性。

文档here

答案 4 :(得分:5)

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

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

答案 5 :(得分:4)

使用ProcessStartInfo类并为WorkingDirectory属性赋值。