System.Diagnostics.Process(); StartInfo.Arguments 使用环境变量作为参数
System.Diagnostics.Process(); StartInfo.Arguments use Environment Variables as argument
如何将环境变量作为参数传递给 System.Diagnostics.Process()?由于某种原因,使用可变路径失败。
例如,我试图在路径 %windir% 上打开资源管理器,但失败了:
程序:explorer.exe
参数: /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();
正如评论者 Hans Passant 所说,像 %windir%
这样的语法是特定于命令行处理器的。您可以通过调用 Environment.GetEnvironmentVariable("windir")
(即获取 WINDIR
环境变量的当前值)或 Environment.GetFolderPath(SpecialFolder.Windows)
(即让 Windows 报告已知特殊文件夹的路径)。
如果您想让命令行处理器完成工作,您需要 运行 命令行处理器。例如:
f.StartInfo.FileName = "cmd.exe";
f.StartInfo.Arguments = "/c explorer.exe /n /e /select,%windir%";
这将 运行 cmd.exe
,这反过来将代表您启动 explorer.exe
进程,将 %windir%
表达式解析为环境变量取消引用。
如何将环境变量作为参数传递给 System.Diagnostics.Process()?由于某种原因,使用可变路径失败。 例如,我试图在路径 %windir% 上打开资源管理器,但失败了:
程序:explorer.exe 参数: /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();
正如评论者 Hans Passant 所说,像 %windir%
这样的语法是特定于命令行处理器的。您可以通过调用 Environment.GetEnvironmentVariable("windir")
(即获取 WINDIR
环境变量的当前值)或 Environment.GetFolderPath(SpecialFolder.Windows)
(即让 Windows 报告已知特殊文件夹的路径)。
如果您想让命令行处理器完成工作,您需要 运行 命令行处理器。例如:
f.StartInfo.FileName = "cmd.exe";
f.StartInfo.Arguments = "/c explorer.exe /n /e /select,%windir%";
这将 运行 cmd.exe
,这反过来将代表您启动 explorer.exe
进程,将 %windir%
表达式解析为环境变量取消引用。