【发布时间】:2012-08-03 09:03:06
【问题描述】:
我正在开发一个 C# 应用程序。
我需要创建变量并将其传递给一个新进程,我正在使用ProcessStartInfo.EnvironmentVariables 进行。
新进程必须运行提升,所以我使用 Verb = "runas"
var startInfo = new ProcessStartInfo(command)
{
UseShellExecute = true,
CreateNoWindow = true,
Verb = "runas"
};
foreach (DictionaryEntry entry in enviromentVariables)
{
startInfo.EnvironmentVariables.Add(entry.Key.ToString(), entry.Value.ToString());
}
问题是根据msdn documentation:
您必须将
UseShellExecute属性设置为 false 才能在更改EnvironmentVariables属性后启动进程。如果UseShellExecute为真,则在调用 Start 方法时会抛出InvalidOperationException。
但 runas 变量需要 UseShellExecute=true
有没有办法同时做到:以提升的身份运行进程并设置环境变量?
编辑
我会尝试改写我的问题...
有没有办法将参数安全地传递给另一个进程,这样只有另一个进程才能读取参数。
【问题讨论】:
-
可能不太好,但可能会起作用:首先创建一个批处理文件并使用 setx /M 键值设置环境变量。您首先运行批处理脚本,然后运行真正的命令。不过,这会使您的机器范围内的环境变量变得混乱。
-
谢谢,但这可能会导致安全漏洞,因为在此用户下运行的每个人都可以读取全局环境变量
-
是的,我已经说过这不好......这是轻描淡写:-(
-
您是否尝试设置环境变量(通过 System.Environment.SetEnvironmentVariable(key, balue));然后开始这个过程?
-
但是当 UseShellExecute = true 时我该怎么做呢?
标签: c# environment-variables processstartinfo runas