2011-02-12 48 views
0

我正在尝试安装只能由特定用户访问的注册表项。安装程序的每个其他部分都工作(安装服务并注册一个组件)。这是片段。Wix RegistryKey权限

<Component Id="cmpXXX" Guid="{YYY}"> 
    <RegistryKey Root="HKLM" Key="Software\ZZZ" Action="createAndRemoveOnUninstall"> 
     <RegistryKey Key="Machine" Action="createAndRemoveOnUninstall"> 
      <Permission User="Administrators" GenericAll="yes" /> 
      <RegistryValue Type="string" Name="ID" Value="SecretID" /> 
      <RegistryValue Type="string" Name="Key" Value="SecretKey" /> 
     </RegistryKey> 
    </RegistryKey> 
</Component> 

安装程序完成后,所有用户都可以读取密钥(而不仅仅是管理员)。我的命令行安装是这样的:

msiexec /i installer.msi /l*v installlog.txt 

日志没有提到有关权限。 当我在Orca中打开数据库时,LockPermissions表显示权限行,它看起来很好。

我在做什么错?

回答

7

在向每个RegistryValue添加权限条目后,它似乎开始工作。

<Component Id="cmpXXX" Guid="{YYY}"> 
    <RegistryKey Root="HKLM" Key="Software\ZZZ" Action="createAndRemoveOnUninstall"> 
     <RegistryKey Key="Machine" Action="createAndRemoveOnUninstall"> 
      <Permission User="Administrators" GenericAll="yes" /> 
      <RegistryValue Type="string" Name="ID" Value="SecretID"> 
       <Permission User="Administrators" GenericAll="yes" /> 
      </RegistryValue> 
      <RegistryValue Type="string" Name="Key" Value="SecretKey"> 
       <Permission User="Administrators" GenericAll="yes" /> 
      </RegistryValue> 
     </RegistryKey> 
    </RegistryKey> 
</Component> 

但它有锁定整个Software \ ZZZ键的副作用。不太理想,但我可以解决这个问题。

0

如果您在多个组件中创建值,或者创建中间键(Software \ XXX和Software \ XXX \ YYY),请确保所有子元素都具有子元素。

相关问题