Vbscript 按需特权访问

Vbscript 按需特权访问,vbscript,windows-installer,installshield,uac,Vbscript,Windows Installer,Installshield,Uac,在我们的安装包中,用户(不一定是管理员)可以选择为当前用户(CU)或所有用户(AU)安装我们的应用程序。选择CU后,自定义操作(即VB脚本)会在HKCU注册表中写入内容。另一方面,当选择AU时(对于管理员),相同的脚本会将相同的内容写入HKLM 在WinXP及以下版本中,这一切都很好。但对于Win7来说,这是一个问题——正如您可以想象的——因为UAC。用户始终可以在EXE文件上单击鼠标右键->以管理员身份运行,或暂时关闭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
Sub AddRegistryKey(键,值)
昏暗的地狱
设置WshShell=CreateObject(“WScript.Shell”)
如果Session.Property(“alluser”)“1”,则
'我可以要求在这一点进行高程测量吗?
Session.Property(“PathToRegistryKeys”)=Session.Property(“PathToRegistryKeysUser”)HKCU
其他的
Session.Property(“PathToRegistryKeys”)=Session.Property(“PathToRegistryKeysAll”)HKLM
如果结束
WshShell.RegWrite Session.Property(“PathToRegistryKeys”)&Session.Property(“ProductCode”)&“\”&key&“\”,value,“REG\u SZ”
端接头

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

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


另请参见:

我会读到:

谢谢你的链接。这看起来是我所需要的一个可行的解决方案。事实上,我能够使它部分工作。但是,我试图在自定义操作(vbscript)上设置
msinstallperuser
,而这似乎是错误的位置。是否有任何具体的设置位置?在卸载期间,我需要在运行时进行特权访问…:(通过
msinstallperuser
进行的每用户安装不会提升,句号。因此,如果您需要提升,您不能走这条路线。我建议重新审视您的需求,因为提升而不提升是一个明显的冲突。我不是有意提升每用户安装;如果这样理解,我表示歉意。另外,我通常不接受回答者只是指给我一个我可以用谷歌自己搜索的链接。这一个看起来是个例外。有时有人解释得太好了,我自己也说不出更好的。如果你能提供一个答案,重述你从那篇文章中学到的东西,这将是一个很好的理解强化练习。我会投你一票。