我正在从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属性在启动进程之前设置它.如果未设置该属性,则默认工作目录为%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属性访问该目录.
试图实现这一点之后,我只是打了个招呼.如果将"UseShellExecute"设置为false,则设置WorkingDirectory值不起作用.
使用ProcessStartInfo.WorkingDirectory属性.
文档在这里.
Process.Start方法有一个重载,它接受ProcessStartInfo的一个实例.该类有一个名为"WorkingDirectory"的属性.
将该属性设置为您要使用的文件夹,并使其在正确的文件夹中启动.