Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wix set程序作为管理器运行_Wix_Administrator - Fatal编程技术网

Wix set程序作为管理器运行

Wix set程序作为管理器运行,wix,administrator,Wix,Administrator,我已经将程序设置为windows启动运行,但是该程序只能在windows 10中以管理员身份运行时才能工作,有人能告诉我应该在代码中添加什么来设置它吗?这是我的Wix代码: 在产品模块中有 <ComponentRef Id="RegistryEntries"/> 然后 <Fragment> <DirectoryRef Id="ProgramFilesFolder"> <Component Id="RegistryEntries"

我已经将程序设置为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>


非常感谢大家。

问题是您将此注册表项放在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警告,但您可以安全地忽略它们)。如果您使用的是按用户安装,我不知道这是否能够写入注册表项,除非安装以管理员身份运行。。。此外,我还将
放在RegistryValue的值周围,因为由于空格的缘故,将完整路径用引号括起来总是很好的

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

[#i办公室]

因此,如果定义“March Networks Video Assistant.exe”的组件使用Id=“MarchNetworksVideoAssistant.exe”,则可以将注册表值更新为

value=“[#MarchNetworksVideoAssistant.exe]”

您可以很好地解释这个语法

如果找到格式为[#filekey]的子字符串,则该子字符串将替换为文件的完整路径,值filekey用作文件表中的键。[#filekey]的值保持为空,并且在安装程序运行CostInitialize操作、FileCost操作和CostFinalize操作之前不会替换为路径。[#filekey]的值取决于文件所属组件的安装状态。如果组件是从源运行的,则该值为文件源位置的路径。如果组件是在本地运行的,则该值为安装后文件目标位置的路径。如果组件的操作状态为“缺席”,则安装组件的ed状态用于确定[#filekey]值。如果组件的安装状态也不存在或为空,[#filekey]解析为空字符串,否则解析为基于组件安装状态的值。有关检查组件安装状态的详细信息,请参阅检查功能、组件和文件的安装


非常感谢你,布莱恩,这真的很有帮助!