如何在 UAC 处于活动状态时设置 System EnvVar(Windows 脚本宿主)

Posted

技术标签:

【中文标题】如何在 UAC 处于活动状态时设置 System EnvVar(Windows 脚本宿主)【英文标题】:How to set System EnvVar when UAC is active (Windows Script Host) 【发布时间】:2012-04-16 09:20:36 【问题描述】:

在启动程序之前,我必须创建一个脚本来更新系统环境变量(基于命令行参数)。

在 Windows 7 中,拒绝更新系统环境变量。我想为环境的设置执行特权提升。变种。但以普通用户身份运行程序。

怎么做?

注意: 我尝试了以下解决方案:

使用 2 个脚本:

1 主从命令行获取所有信息,调用从脚本更改系统环境。 var.,并最终启动程序 1 个更新系统环境的从属脚本。变量。 主脚本尝试使用权限提升调用从脚本,但不起作用

我尝试了两种特权提升解决方案:

    使用“runas /User:Administrator ...”命令但它要求输入管理员密码:失败 使用 "ShellExecute ...., "runas"" 命令但它告诉我我的脚本不是应用程序:失败

【问题讨论】:

尝试在 cmd.exe 或 wscript.exe 上使用 runas,而不是直接在脚本上使用。 @Harry 我试过 runas 但我有以下警告:我们不知道我们机器的管理员密码。但是我们每个人都作为管理权限(在某种程度上)所以我可以从 Windows 配置 GUI 修改 sys env var(在提示 UAC 之后)。但是我不能对我自己的用户使用 runas 命令,我的权限被拒绝了。而且我不能以管理员身份运行它,因为我不知道密码......我真的需要一个简单的权限提升,就像我想要执行管理任务时我只需要确认更改。无论如何,谢谢你的建议:) 我认为 runas 动词与“以管理员身份运行”的作用相同,即如果您已经是管理员,它只会提示您批准? 这也是我所希望的:( 【参考方案1】:

我找到了一种至少可以在 Windows 7 上运行的方法(不知道它是否可以在我们仍然拥有的少数 Windows XP 帽子上运行)。

我在主脚本中做了以下操作:

currentDirectory = left(WScript.ScriptFullName,(Len(WScript.ScriptFullName))-(len(WScript.ScriptName)))

Set UAC = WScript.CreateObject("Shell.Application")
UAC.ShellExecute "wscript.exe", currentDirectory + "my-script.vbs /Param1:Value1 ...", "", "runas", 0

my-script 正在更新 sys var env。

注意:我第一次使用 ShellExecute 的体验失败了,因为我试图执行脚本。我用“my-script.vbs”代替“wscript.exe”作为可执行文件名。

【讨论】:

然后我在脚本结束时启动了我的可执行文件,调用 explorer.exe 并将可执行文件作为参数,所以它得到更新的 sys env var 值!【参考方案2】:

恕我直言,禁用 UAC,这只是 * 的痛苦 但如果你不能(像我一样 8

psexec.exe -d -u userid -p password CMD /c program_with_path

您(或运行 sript 的用户)必须确认提示。

【讨论】:

感谢您的提示。我可以在我的计算机上停用它,但不能在运行脚本的所有计算机上停用。此外,用户 ID 和密码将是特定于用户的,这也是我想避免的。最后,我真的很想避免在脚本中明文写密码。 我认为不需要用户/密码是一个安全漏洞,这样的脚本可能会被用作病毒。为什么需要系统变量,你有不同类型的环境变量,应该可以设置用户环境变量 我们正在使用 IBM Rational DOORS。有几个同事需要 2 个(或更多)DOORS 配置(不同的 DOORS 客户端版本和不同的 DOORS License Server 配置)。遗憾的是,许可证配置存储在系统环境变量中。我的目标是创建一个通用脚本,它带有一些参数可以设置正确的系统环境。变种。用于许可证服务器并启动请求的 DOORS 客户端版本。这就是购买昂贵的闭源软件的回报:( 我只是想要 UAC 请求,更像是我运行安装程序时的请求,在某些时候它请求更高的权限,并且仅显示一个是/否的弹出窗口按钮对话框。无需密码。此外,我试图将特权提升限制为环境的设置。变量。 我已经尝试过你的命令,但我遇到了与 runas 相同的问题。尽管我的帐户具有管理权限,但我没有获得设置 sys env var 所需的权限提升(我拥有的权限)。而且我不知道管理员密码。所以我也不能使用这个解决方案:(但无论如何感谢您的时间!

以上是关于如何在 UAC 处于活动状态时设置 System EnvVar(Windows 脚本宿主)的主要内容,如果未能解决你的问题,请参考以下文章

运行程序时保持 iphone 处于活动状态

如何在特定视口上设置触摸手势/hammer.js 处于活动状态?

Unity 2D 中的视频播放器播放音频但在处于非活动状态后设置为活动时不显示视觉效果

如何使视频描述在点击时处于活动状态?

如何让数据网格表现得像 ctrl 键处于活动状态?

FCM 点击如何在应用程序处于后台状态时打开用户指定的活动而不是默认活动