【问题标题】:.NET Process.Start default directory?.NET Process.Start 默认目录?
【发布时间】:2010-09-12 00:15:41
【问题描述】:

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

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

【问题讨论】:

    标签: c#


    【解决方案1】:

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

    ...
    using System.Diagnostics;
    ...
    
    var startInfo = new ProcessStartInfo();
    
      startInfo.WorkingDirectory = // working directory
      // set additional properties 
    
    Process proc = Process.Start(startInfo);
    

    【讨论】:

    • WorkingDirectory 可以是相对路径吗?如果可以,它是相对于当前文件还是当前可执行文件的目录?我无法让我的程序找到我正在尝试启动的可执行文件。我已经将工作目录设置为exe的目录(相对于当前文件和当前exe),但是找不到。
    【解决方案2】:

    在启动进程之前使用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 属性直接访问它。

    【讨论】:

    • 很好,我不知道您可以在 .WorkingDirectory 属性中使用环境变量。
    • Bingo,这就是答案——默认目录是 SYSTEMROOT。 +1
    【解决方案3】:

    只是在尝试实现这一点后打了我的头。 如果将“UseShellExecute”设置为 false,则无法设置 WorkingDirectory 值。

    【讨论】:

    • 这并没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post
    • 即使在 6 年后,这条关于 UseShellExecute 的评论还是很有帮助的。修复了问题。
    【解决方案4】:

    使用 ProcessStartInfo.WorkingDirectory 属性。

    文档here.

    【讨论】:

      【解决方案5】:

      Process.Start 方法有一个采用 ProcessStartInfo 实例的重载。这个类有一个名为“WorkingDirectory”的属性。

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 2016-11-10
          • 2019-08-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多