Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET进程。是否启动默认目录?_C# - Fatal编程技术网

C# .NET进程。是否启动默认目录?

C# .NET进程。是否启动默认目录?,c#,C#,我正在从一个C#控制台应用程序内部启动一个Java应用程序。对于Java应用程序不关心“默认”目录是什么的情况,它可以正常工作,但对于只在当前目录中搜索支持文件的Java应用程序,它会失败 是否有可以设置的流程参数来指定启动流程的默认目录?是! ProcessStartInfo有一个名为WorkingDirectory的属性,只需使用: ... using System.Diagnostics; ... var startInfo = new ProcessStartInfo(); st

我正在从一个C#控制台应用程序内部启动一个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属性


Docs.

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


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

使用
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);

还有一个环境变量,用于控制进程的当前工作目录,您可以通过属性直接访问该目录。

在我尝试实现此功能时,请注意。
如果将“UseShellExecute”设置为false,则设置WorkingDirectory值无效。

Nice,我不知道您可以在.WorkingDirectory属性中使用环境变量。宾果,这就是答案——默认目录是SYSTEMROOT+1这并不能回答这个问题。要评论或要求作者澄清,请在他们的帖子下方留下评论-你可以随时在自己的帖子上发表评论,一旦你有足够的评论,你就可以发表评论。即使6年后,关于UseShellExecute的评论也很有帮助。修复了此问题。
工作目录
是否可以是相对路径,如果是,它与当前文件或当前可执行文件的目录有关?我无法让我的程序找到要启动的可执行文件。我已经将工作目录设置为exe的目录(相对于当前文件和当前exe),但它找不到它。