【发布时间】:2010-09-12 00:15:41
【问题描述】:
我正在从 C# .NET 控制台应用程序内部启动 Java 应用程序。它适用于 Java 应用程序不关心“默认”目录是什么的情况,但对于只在当前目录中搜索支持文件的 Java 应用程序却失败了。
是否可以设置进程参数来指定启动进程的默认目录?
【问题讨论】:
标签: c#
我正在从 C# .NET 控制台应用程序内部启动 Java 应用程序。它适用于 Java 应用程序不关心“默认”目录是什么的情况,但对于只在当前目录中搜索支持文件的 Java 应用程序却失败了。
是否可以设置进程参数来指定启动进程的默认目录?
【问题讨论】:
标签: c#
是的! ProcessStartInfo 有一个名为 WorkingDirectory 的属性,只需使用:
...
using System.Diagnostics;
...
var startInfo = new ProcessStartInfo();
startInfo.WorkingDirectory = // working directory
// set additional properties
Process proc = Process.Start(startInfo);
【讨论】:
WorkingDirectory 可以是相对路径吗?如果可以,它是相对于当前文件还是当前可执行文件的目录?我无法让我的程序找到我正在尝试启动的可执行文件。我已经将工作目录设置为exe的目录(相对于当前文件和当前exe),但是找不到。
在启动进程之前使用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.CurrentDirectory 属性直接访问它。
【讨论】:
只是在尝试实现这一点后打了我的头。 如果将“UseShellExecute”设置为 false,则无法设置 WorkingDirectory 值。
【讨论】:
使用 ProcessStartInfo.WorkingDirectory 属性。
文档here.
【讨论】:
Process.Start 方法有一个采用 ProcessStartInfo 实例的重载。这个类有一个名为“WorkingDirectory”的属性。
将该属性设置为您要使用的文件夹,这应该使它在正确的文件夹中启动。
【讨论】:
使用ProcessStartInfo 类并为WorkingDirectory 属性赋值。
【讨论】: