在我们的安装包中,用户(不一定是管理员)可以选择为当前用户 (CU) 或所有用户 (AU) 安装我们的应用程序。选择CU时,自定义操作(IE VB脚本)在HKCU注册表中写入一些内容。On the other hand, when AU is selected (for Admins), the same script writes the same content to HKLM.
这在 WinXP 及以下版本中都很好。但是对于 Win7,这是一个问题——正如你可以想象的那样——因为 UAC。用户始终可以在 EXE 文件上右键单击->以管理员身份运行或暂时关闭 UAC,但这并不能满足普通用户不需要提升来运行安装程序的原始要求。
我尝试过的解决方法是将Require Administrative Privileges项目属性设置为Yes。但这不适用于上面提到的普通用户。
有没有办法按需请求提升?我在想,如果用户选择 AU,那么我不会在双击程序时询问海拔,而是在执行安装程序之前。在下面的片段中查看我的评论:
Sub AddRegistryKey(key, value)
Dim WshShell
Set WshShell = CreateObject("WScript.Shell")
If Session.Property("ALLUSERS") <> "1" Then
' Can I request for elevation at this point?
Session.Property("PathToRegistryKeys") = Session.Property("PathToRegistryKeysUser") ' HKCU
Else
Session.Property("PathToRegistryKeys") = Session.Property("PathToRegistryKeysAll") ' HKLM
End If
WshShell.RegWrite Session.Property("PathToRegistryKeys")&Session.Property("ProductCode")&"\"&key&"\", value, "REG_SZ"
End Sub