我已经将程序设置为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>
非常感谢大家。
答案 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=""[INSTALLFOLDER]March Networks Video Assistant.exe"" KeyPath="yes"/>
</RegistryKey>
</Component>
</DirectoryRef>
</Fragment>
所以请注意我将HKCU更改为HKLM(这可能会在编译期间导致ICE警告,但您可以放心地忽略它们)。如果您使用的是每用户安装,我不知道这是否能够编写注册表项,除非安装是以管理员身份运行的...我还将"
放在您的RegistryValue&#39周围; s值因为由于空格而在引号中包装完整路径总是很好。
您可以做的另一件好事是使用组件的安装路径更新RegistryValue的值,该路径可以使用以下语法引用:
[#IDOfFile]
因此,如果您的组件定义了&#34; March Networks Video Assistant.exe&#34; <File>
使用Id =&#34; MarchNetworksVideoAssistant.exe&#34;您可以将RegistryValue的值更新为
value=""[#MarchNetworksVideoAssistant.exe]""
您可以对此语法here
有一个很好的解释如果找到[#filekey]形式的子字符串,则将其替换为文件的完整路径,其值filekey用作File表中的键。 [#filekey]的值保持空白,在安装程序运行CostInitialize操作,FileCost操作和CostFinalize操作之前,不会替换为路径。 [#filekey]的值取决于文件所属组件的安装状态。如果组件是从源运行的,则该值是文件源位置的路径。如果组件在本地运行,则该值是安装后文件的目标位置的路径。如果组件的操作状态为不存在,则组件的已安装状态用于确定[#filekey]值。如果组件的已安装状态也不存在或为null,则[#filekey]解析为空字符串,否则它将根据组件的已安装状态解析为该值。有关检查组件的安装状态的更多信息,请参阅检查功能,组件,文件的安装。