我为.NET WPF应用程序开发了一个带有WiX的自定义安装程序。如果我右键单击并以管理员身份运行,它可以正常工作,但是当没有运行时,由于权限不足,某些组件无法安装。
这些组件包括SQL Server Express 2008 R2,FoxIt Reader,ActiveX组件和其他一些组件。它还要求在新安装的数据库上运行一些SQL脚本 - 无论如何,它们都需要管理员权限。
我尝试将InstallScope =“perMachine”和InstallPrivileges =“elevated”属性添加到Package节点,但这似乎没有什么区别。
我确定这是愚蠢的,但我在参考或网上找不到任何东西。
答案 0 :(得分:23)
我想如果你只是添加
<Property Id="MSIUSEREALADMINDETECTION" Value="1" />
它应该解决问题。如果没有,请告诉我,我可以再做一些检查。
答案 1 :(得分:0)
对我来说,我应该运行一个注册表命令,通过CustomAction WiX元素删除系统环境变量,该元素需要管理员权限。
使用CustomAction→Impersonate =&#34; no&#34;如 https://stackoverflow.com/a/8657472/3205679 中提到的那样为我工作。
WiX自定义操作代码:
<CustomAction Id = "Uninstall_MYSYSENV"
Directory = "INSTALLFOLDER"
ExeCommand = 'cmd.exe /c "reg delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v MYSYSENV /f"'
Execute = "deferred"
Impersonate= "no"
Return = "asyncNoWait"
/>
<InstallExecuteSequence>
<Custom Action="Uninstall_MYSYSENV"
After="InstallInitialize">Installed AND NOT UPGRADINGPRODUCTCODE</Custom>
</InstallExecuteSequence>
答案 2 :(得分:0)
将此添加到您的包元素
<Property Id="ALLUSERS" Value="1" /> <!--equals to install="permachine" at package element but this element depricated -->
<Property Id="MSIUSEREALADMINDETECTION" Value="1" />
<Condition Message="Please Run as Administrator.">
Privileged
</Condition>
然后使用Winrar为这些msi 文件创建一个简单的 sfx存档文件:
“设置”标签&gt; 执行后输入:您的msi文件名
高级标签&gt;标记请求管理员权限选项复选框