.NET Process.Start默认目录?

时间:2020-03-06 14:32:25  来源:igfitidea点击:

我正在从C.NET控制台应用程序内部启动Java应用程序。对于Java应用程序不在乎"默认"目录是什么情况,但对于仅在当前目录中搜索支持文件的Java应用程序而言,这种方法很好用。

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

解决方案

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

...
using System.Diagnostics;
...

var startInfo = new ProcessStartInfo();

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

Process proc = Process.Start(startInfo);

使用ProcessStartInfo.WorkingDirectory属性。

文档在这里。

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

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

使用" ProcessStartInfo"类,并为" WorkingDirectory"属性分配一个值。

在启动过程之前,请使用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属性直接访问该目录。