【问题标题】:Installer Per Machine Works as Per User每台机器的安装程序按用户工作
【发布时间】:2014-08-20 13:22:07
【问题描述】:

我使用 HKLM 注册表为插件创建了“每台机器”安装程序。
我在 32 位机器上安装了插件。安装它的用户具有管理员权限。

注册表项添加在HKLM\SOFTWARE\Sparx Systems\EAAddins\MyAddin 下 - 适用于所有用户,但插件仅适用于安装“每台机器”安装程序的用户。

对于所有其他用户,该程序不可用。

有什么想法吗?

编辑:

这是安装程序中的包定义:

    <Package Description="#Description"
             Comments="Comments"
             InstallerVersion="200"
             Compressed="yes"/>

这是注册表定义:

<Component Id="AdminAddinsRegEntries" Guid="A8B685BF-E4B3-4D8B-A8B1-BAB845812233">
    <RegistryKey Root="HKLM" Key="Software\Sparx Systems\EAAddins\AdminAddins" Action="createAndRemoveOnUninstall">
       <RegistryValue Type="string" Value="AdminAddins.MyClass" />
    </RegistryKey>
</Component>

【问题讨论】:

  • 您是否将Package 元素的InstallScope 设置为perMachine?另外,请在您的问题中包含安装程序的相关部分。
  • @Yuriy,请查看编辑后的帖子,提前致谢!

标签: c# wix installation 32-bit wix3.5


【解决方案1】:

首先,在你的包元素中添加以下属性:

<Package InstallScope="perMachine" InstallPrivileges="elevated" ... />

每台机器
设置此值以声明包是按机器安装的,并且需要提升的权限才能安装。将 ALLUSERS 属性设置为 1。
提升
设置此值以声明软件包需要提升权限才能安装。 Source

其次,可以将RegistryKeyRoot值改为HKMU

<RegistryKey Root="HKMU" ... />

因此注册表项将放置在当前用户或本地计算机配置单元中,具体取决于安装类型。或者,如果您只将它用于每台机器的安装,您可以保持原样。

【讨论】:

  • 这是原因:课程是按用户注册的。有什么想法吗?
  • @user3165438,我不太明白您的意思,但您是否尝试过将相应元素的 Root 属性值更改为 HKMU
  • 谢谢。 HKMU 是什么意思?它是所有用户的通用注册表吗?
  • Wix 将 HKMU 解析为 HKLM 如果您在安装程序中勾选“适用于所有用户”,如果不勾选则解析为 HKCU
  • 但这不是问题 - 因为 dll 在 HKLM 下成功注册。问题是 COM 对象(类)是按用户注册的。如果你能看看here,那就太好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-20
  • 1970-01-01
相关资源
最近更新 更多