首页 > 解决方案 > C# 使用自定义环境变量以管理员身份启动子进程(在 CMD 窗口中)

问题描述

我有一个包含一些 Windows SDK 可执行文件并在单独的 CMD 窗口中打开它们的程序。

Process process = new Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.Arguments = "/C signtool.exe [args] & pause";
process.StartInfo.Verb = "runas";
process.Start();

现在,我已将 Windows SDK 文件夹添加到系统的 Path 环境变量中。有没有办法以编程方式将 Windows SDK 文件夹添加到用户的 Path 环境变量中,或者运行将 SDK 文件夹添加到特定 CMD 窗口的 Path 变量中的进程?

这是我需要添加到每个 CMD 窗口的 Path 变量的文件夹:

C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x86

此子进程必须以管理员身份运行。它不需要接收子进程的输出。

标签: c#winapicmd

解决方案


使用 aProcessStartInfo及其Environment属性实例来设置它。

var startInfo = new ProcessStartInfo();
var defaultPath = startInfo.Environment["PATH"];
var newPath = "C:\\Program Files (x86)\\Windows Kits\\10\\bin\\10.0.16299.0\\x86" + ";" + defaultPath;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/c set > D:\\env.txt";
startInfo.Verb = "runas";
startInfo.Environment["PATH"] = newPath;
startInfo.UseShellExecute = false; // required to use Environment variables
Process.Start(startInfo);

推荐阅读