Wix设置程序作为管理员运行

时间:2017-06-21 15:06:48

标签: wix administrator

我已经将程序设置为Windows启动运行,但是程序只能在Windows 10中以管理员身份运行时才能运行,任何人都可以告诉我应该在代码中添加什么来设置它?这是我的Wix代码:

在产品模块中有

<ComponentRef Id="RegistryEntries"/>

然后

<Fragment>
    <DirectoryRef Id="ProgramFilesFolder">
      <Component Id="RegistryEntries" Guid="14fe9526-0da4-4761-ad27-8a77f145c6b5">
        <RegistryKey Root="HKCU"
                     Key="Software\Microsoft\Windows\CurrentVersion\Run"
              Action="createAndRemoveOnUninstall">
          <RegistryValue Type="string" Name="March Networks Video Assistant" Value="[INSTALLFOLDER]March Networks Video Assistant.exe" KeyPath="yes"/>          
        </RegistryKey>
      </Component>
    </DirectoryRef>
  </Fragment>

非常感谢大家。

1 个答案:

答案 0 :(得分:0)

问题是你将这个注册表项放在HKCU中,它将在启动时在当前用户的上下文中运行。

如果您希望在启动时以管理员身份运行,则需要进入HKLM。

尝试以下方法:

<Fragment>
  <DirectoryRef Id="ProgramFilesFolder">
    <Component Id="RegistryEntries" Guid="14fe9526-0da4-4761-ad27-8a77f145c6b5">
      <RegistryKey Root="HKLM"
                 Key="Software\Microsoft\Windows\CurrentVersion\Run"
          Action="createAndRemoveOnUninstall">
        <RegistryValue Type="string" Name="March Networks Video Assistant" Value="&quot;[INSTALLFOLDER]March Networks Video Assistant.exe&quot;" KeyPath="yes"/>          
      </RegistryKey>
    </Component>
  </DirectoryRef>
</Fragment>

所以请注意我将HKCU更改为HKLM(这可能会在编译期间导致ICE警告,但您可以放心地忽略它们)。如果您使用的是每用户安装,我不知道这是否能够编写注册表项,除非安装是以管理员身份运行的...我还将&quot;放在您的RegistryValue&#39周围; s值因为由于空格而在引号中包装完整路径总是很好。

您可以做的另一件好事是使用组件的安装路径更新RegistryValue的值,该路径可以使用以下语法引用:

[#IDOfFile]

因此,如果您的组件定义了&#34; March Networks Video Assistant.exe&#34; <File>使用Id =&#34; MarchNetworksVideoAssistant.exe&#34;您可以将RegistryValue的值更新为

value="&quot;[#MarchNetworksVideoAssistant.exe]&quot;"

您可以对此语法here

有一个很好的解释
  

如果找到[#filekey]形式的子字符串,则将其替换为文件的完整路径,其值filekey用作File表中的键。 [#filekey]的值保持空白,在安装程序运行CostInitialize操作,FileCost操作和CostFinalize操作之前,不会替换为路径。 [#filekey]的值取决于文件所属组件的安装状态。如果组件是从源运行的,则该值是文件源位置的路径。如果组件在本地运行,则该值是安装后文件的目标位置的路径。如果组件的操作状态为不存在,则组件的已安装状态用于确定[#filekey]值。如果组件的已安装状态也不存在或为null,则[#filekey]解析为空字符串,否则它将根据组件的已安装状态解析为该值。有关检查组件的安装状态的更多信息,请参阅检查功能,组件,文件的安装。