【问题标题】:Start process with environment variable使用环境变量启动进程
【发布时间】:2016-08-26 12:46:54
【问题描述】:

我想用以下路径启动一个进程。

“ProgramFiles(x86)\Philips Speech\设备控制中心PDCC.exe”

当我在控制台中输入此内容时,进程按预期启动,但当我尝试在代码中执行此操作时,出现以下异常:

系统找不到指定的文件

到目前为止,这是我的代码:

var startInfo = new ProcessStartInfo("%ProgramFiles(x86)%\Philips Speech\Device Control Center PDCC.exe");
Debug.Assert(startInfo.EnvironmentVariables.ContainsKey("ProgramFiles(x86)")) //Is true
new Process(startInfo).Start(); //<- exception occures here

是否有人知道我是否可以通过为 ProcessStartInfo 类提供环境变量来直接执行此操作,或者我是否必须在这样做之前对其进行解析?

【问题讨论】:

    标签: c# process environment-variables


    【解决方案1】:

    您应该使用它来获取 Program Files 的路径:

    Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
    

    Special folders enum.

    【讨论】:

      【解决方案2】:
      string path = Environment.ExpanEnvironmentVariables("%ProgramFiles(x86)%\Philips Speech\Device Control Center PDCC.exe");
      var startInfo = new ProcessStartInfo(path);
      new Process(startInfo).Start(); 
      

      这样您就可以使用变量(例如"%ProgramFiles(x86)%),而不依赖于C:\ 中的文件夹或其他内容。

      【讨论】:

      • 当我在设置中保存包括环境变量在内的路径时,我也会选择您的解决方案,因为它很干净
      【解决方案3】:

      构造函数只是将fileName 属性设置为您传递的内容,所以是的,您需要先解析环境变量。

      来自the source code for ProcessStartInfo

      public ProcessStartInfo(string fileName) {
           this.fileName = fileName;
      }
      

      【讨论】:

        【解决方案4】:

        或者试试这个,如果你想要同样的行为,比如开始->运行

        Environment.ExpandEnvironmentVariables("%windir%\System32")
        

        【讨论】:

          猜你喜欢
          • 2021-01-30
          • 1970-01-01
          • 2013-04-17
          • 2018-09-01
          • 2013-04-03
          • 2012-12-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多