特权访问点播

时间:2013-10-28 08:25:51

标签: vbscript windows-installer installshield uac

在我们的安装包中,用户(不一定是管理员)可以选择为当前用户(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

2 个答案:

答案 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)

相关问题