2013-10-28 58 views
0

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

有一种方法可以实现此目的,但它在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?

+0

感谢您的链接。这看起来像是我需要的一个可行的解决方案。事实上,我能够使它部分工作。但是,我试图在自定义操作(vbscript)中设置'MSIINSTALLPERUSER',这似乎是错误的位置。有没有应该设置的具体位置?我需要在运行卸载过程中的特权访问... :( –

+0

每用户通过'MSIINSTALLPERUSER'安装不提升,期。所以如果你需要抬高,你不能走这条路。我建议重新访问您的要求,为提升没有升降是一个明显的冲突 –

+0

我不是故意要提高每用户安装;。道歉,如果大家的理解是这样 –