的System.Diagnostics.Process(); StartInfo.Arguments使用Environment Variables作为参数

时间:2015-10-22 16:44:48

标签: c# environment-variables system.diagnostics

如何将环境变量作为参数传递给System.Diagnostics.Process()?由于某种原因,使用变量路径失败。 例如,我试图在路径%windir%上打开资源管理器,这失败了:

程序:explorer.exe args:/ n,/ e,%windir%

var f = new System.Diagnostics.Process();
f.StartInfo.WorkingDirectory = Path.GetDirectoryName(Program);
f.StartInfo.FileName = Program;
f.StartInfo.Arguments = !string.IsNullOrWhiteSpace(Params) ? Params : null;
f.Start();

1 个答案:

答案 0 :(得分:0)

正如评论者Hans Passant所说,%windir%之类的语法特定于命令行处理器。您可以通过调用Environment.GetEnvironmentVariable("windir")(即获取WINDIR环境变量的当前值)或Environment.GetFolderPath(SpecialFolder.Windows)(即让Windows报告已知路径)在您自己的代码中模拟它特殊文件夹)。

如果要让命令行处理器完成工作,则需要运行命令行处理器。 E.g:

f.StartInfo.FileName = "cmd.exe";
f.StartInfo.Arguments = "/c explorer.exe /n /e /select,%windir%";

这将运行cmd.exe,后者将代表您启动explorer.exe进程,将%windir%表达式解析为环境变量解除引用。