Wix安装程序:在没有提升权限的情况下以每用户安装写入HKLM / HKCR

时间:2015-03-09 11:51:10

标签: wix windows-installer

我创造了一个" perMachine"安装程序与wix工具集。必须以管理员权限启动安装程序,因为它会将多个注册表项写入HKLM和HKCR。

我想将安装程序更改为" perUser"安装。是否可以这样做并仍写信给HKLM和HKCR?注册表项必须在那里注册一个shell图标覆盖处理程序...

迎接

修改 似乎没有办法以非管理员用户身份写入HKLM。 但有没有办法让wix安装程序为管理员提供承诺?如果是这样,我可以使用以下解决方案:

  • 用户知道admin pw(或管理员提供pw):已安装图标覆盖组件
  • 用户不提供admin pw:跳过图标覆盖组件。

所以我的问题是: 1.如何为管理员提示用户? 2.如何根据用户操作跳过/安装组件?

EDIT2: 我尝试了多种组合:

InstallPrivileges ="升高" InstallScope ="每用户"

财产" ALLUSERS"设置为空字符串

财产" MSIUSEREALADMINDETECTION"设为1

Property" MSIINSTALLPERUSER"设为1

所述组件的条件:" Privileged / AdminUser"

到目前为止,没有任何工作。这一切都归结为条件没有正确阅读。我曾尝试过几台拥有管理员用户的电脑。为了使产品能够安装所有功能,我必须通过上下文菜单以管理员身份明确启动安装程序。否则,图标覆盖处理程序将无法安装。

2 个答案:

答案 0 :(得分:2)

指出OP似乎并没有完全理解的东西......

每台计算机和每位用户与写入HKLM所需的权限无关。无论是哪种方式,Windows Installer都不会破坏安全规则。如果安装需要特权并且没有特权,则在两种情况下都会失败。在WiX中,Package InstallPrivileges告诉Windows是否提升以便安装可以正常工作。如果安装用户没有权限,则提升提示将允许输入管理员凭据。因此,1的答案是,如果用户不是管理员,则InstallPrivileges = raise应该允许输入管理员帐户。否则是平原。

您可以对包含受限制的注册表项的组件尝试条件,尝试使用Privileged条件,以便仅在安装提升时才安装。我从未尝试过这个,但它应该有效。

https://msdn.microsoft.com/en-us/library/aa370852(v=vs.85).aspx

其他替代方案是:

组策略将允许将设置推送到受限用户的计算机。这在企业环境中很常见。

我发现shell图标覆盖功能可能在用户的基础上可用。这是一个SWAG,我不知道所需的所有注册表项,但您肯定可以在HKCU中注册您的COM类。如果您使用WiX HKMU密钥,将在每台计算机和每个用户的用户中为机器创建项目。这里的一个例子: http://www.merlinia.com/mdt/WiXTutorial1.msl

答案 1 :(得分:1)

不,每个用户安装只能为每个用户资源(如注册表和c:\ users)配置为每个用户进行写访问。这在Vista中有效,后来不需要提升,因此不需要UAC。