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

时间:2012-04-16 09:20:37

标签: windows vbscript environment-variables uac wsh

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

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

怎么做?

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

使用2个脚本:

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

我尝试了2个特权提升解决方案:

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

2 个答案:

答案 0 :(得分: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

我的脚本正在进行sys var env update。

注意:我对ShellExecute的体验失败了,因为我试图执行脚本。而不是" wscript.exe"我有" my-script.vbs"对于可执行文件名。

答案 1 :(得分:0)

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

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

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