我想用以下路径开始一个过程。
“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类提供环境变量来直接执行此操作,或者我是否必须在执行此操作之前解析它?
答案 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