在我们的安装包中,用户(不一定是管理员)可以选择为当前用户(CU)或所有用户(AU)安装我们的应用程序。选择CU时,自定义操作(即VB脚本)会在HKCU注册表中写入内容。另一方面,当选择AU(对于管理员)时,相同的脚本会将相同的内容写入HKLM。
这在WinXP及以下版本中都很好。但是对于Win7来说,这是一个问题 - 正如你所能想象的那样 - 因为UAC。用户可以随时在EXE文件上执行右键单击>以管理员身份运行或暂时关闭UAC,但这并不能满足普通用户不需要提升的原始要求运行安装程序。
我尝试过的解决方法是将需要管理权限项目属性设置为是。但这不适用于如上所述的普通用户。
是否有办法请求提升按需?我想如果用户选择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
答案 0 :(得分:2)
有一种方法,但它是在Windows 7上引入的,因此它不适用于Windows Vista。它与ALLUSERS
相关,但还需要指定新属性MSIINSTALLPERUSER
。正确启用后,MSIINSTALLPERUSER
会覆盖Word Count summary property的第3位,从而允许每用户安装不需要提升。自InstallShield 2010以来,InstallShield已经为此提供了支持(如果您使用的是旧版本,请查看发行说明以确定)。
如果不支持此属性,就像在Windows Vista上一样,您可以要求提升,也不要在MSI内部提升。这反过来要求启动具有提升权限的每台计算机安装(您描述的启动解决方法),并且将在“过肩”高程中失去对非提升用户的跟踪。
另请参阅:How can the behavior of my .msi on Windows Vista and Seven be so weird?
答案 1 :(得分:0)