使用环境变量启动流程

时间:2016-08-26 12:46:54

标签: c# process environment-variables

我想用以下路径开始一个过程。

  

“ProgramFiles(x86)\ Philips Speech \ Device Control Center 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类提供环境变量来直接执行此操作,或者我是否必须在执行此操作之前解析它?

4 个答案:

答案 0 :(得分:4)

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:\中的文件夹。

答案 1 :(得分:4)

您应该使用它来获取程序文件的路径:

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)

特殊文件夹枚举:

https://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx

答案 2 :(得分:2)

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

来自the source code for ProcessStartInfo

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

答案 3 :(得分:0)

或者试试这个,如果你想要像Start-&gt; Run

这样的行为
intptr_t