C#中通过explorer.exe启动外部EXE时如何传递参数?
解决通过explorer.exe启动带参数程序的问题
问题原因
explorer.exe的参数解析逻辑特殊:如果第一个参数是可执行文件路径,它会启动该程序,但无法直接附加后续参数——后续参数会被explorer判定为要打开的文件夹路径,导致启动资源管理器而非带参数的目标程序。
解决方案
借助cmd.exe中转,通过explorer启动普通权限的cmd进程,再由cmd执行带参数的目标程序,既实现降权启动,又能正确传递参数。
C#代码示例:
var p = new Process { StartInfo = new ProcessStartInfo { FileName = "explorer.exe", // 引号转义说明:外层引号包裹整个cmd命令,目标程序路径用双引号转义以处理含空格的路径 Arguments = $"\"cmd.exe /c \"\"{exeFileToRun}\"\" {cmdArgs}\"" } }; p.Start(); p.WaitForExit();
补充说明
- 若目标程序路径包含空格,必须用双引号包裹,避免cmd解析错误
- 此方法依赖系统自带的cmd.exe,无需额外依赖
内容的提问来源于stack exchange,提问作者dandan21
相关产品推荐
相关产品推荐

