0

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

2 回答 2

2

有一种方法可以做到这一点,但它是在 Windows 7 上引入的,因此它不适用于 Windows Vista。它与 相关ALLUSERS,但还需要指定新属性MSIINSTALLPERUSER。正确启用后,MSIINSTALLPERUSER会覆盖字数摘要属性的第 3 位,从而允许每个用户的安装不需要提升。自 InstallShield 2010 左右以来,InstallShield 就提供了对此的支持(如果您使用的是旧版本,请查看发行说明确定)。

如果不支持此属性,就像在 Windows Vista 上一样,您可以要求提升,或者从不提升 MSI 内部。这反过来需要以提升的权限启动每台机器的安装(您描述的启动解决方法),并且将在“过肩”提升中失去对非提升用户的跟踪。

另请参阅:我的 .msi 在 Windows Vista 和 7 上的行为怎么会如此奇怪?

于 2013-10-28T12:09:39.870 回答
0

我会阅读:在 Windows 7 中为每用户或每机器安装上下文创作单个包

于 2013-10-28T15:07:00.803 回答