当我运行安装程序时,我遇到以下问题。
我正在做一些需要访问注册表的自定义操作,我只能认为它是因为WiX配置没有让它请求管理员权限。我查看了SO上的一些帖子,并尝试使用。
InstallPriveleges="elevated"
在package元素中但是这不会使安装程序具有管理屏蔽,也不会请求它仍然产生错误。
有关测试项目的额外信息。
我的应用程序的名称是:WindowsFormsApplication33,自定义操作项目的名称是CustomAction1,安装项目的名称是SetupProject1。
这是我目前的wix xml文件。
<Package InstallerVersion="200" Compressed="yes" InstallPrivileges="elevated" InstallScope="perUser" />
<Binary Id="CustomAction1.CA.dll" SourceFile ="..\CustomAction1\bin\$(var.Configuration)\CustomAction1.CA.dll" />
<CustomAction Id="disableTaskManager"
Return="check"
Execute="immediate"
BinaryKey="CustomAction1.CA.dll"
DllEntry="disableTaskManager" />
<CustomAction Id="enableTaskManager"
Return="check"
Execute="immediate"
BinaryKey="CustomAction1.CA.dll"
DllEntry="enableTaskManager" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate />
<Feature Id="ProductFeature" Title="SetupProject1" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
<InstallExecuteSequence>
<Custom Action="disableTaskManager" Before="InstallFinalize" />
<Custom Action="enableTaskManager" After="InstallInitialize"><![CDATA[(NOT UPGRADINGPRODUCTCODE)]]></Custom>
</InstallExecuteSequence>
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="Form Test Application" />
</Directory>
</Directory>
</Fragment>
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<Component Guid="{EDA315F6-A115-4348-8607-981C252EA317}">
<File Source="$(var.WindowsFormsApplication33.TargetPath)" KeyPath ="yes" />
</Component>
<Component Guid="{E3182F61-F563-4C13-82B5-8CC39D9DB380}">
<File Source="$(var.CustomAction1.TargetPath)" KeyPath ="yes" />
</Component>
<Component Guid="{E4AF325E-B244-47F5-855A-5B40DBC425D2}">
<File Source="..\WindowsFormsApplication33\bin\Release\WindowsFormsApplication33.exe.config" KeyPath="yes" />
</Component>
</ComponentGroup>
</Fragment>
更新:将InstallScope值从perUser更改为“perMachine”确实会出现UAC提示,但DLL错误仍然存在..
答案 0 :(得分:2)
您的自定义操作是即时的,这意味着它不会以高程运行。必须将其推迟到以高程运行。它与WiX无关,特别是它只是立即自定义操作以用户身份运行但有限。
答案 1 :(得分:1)
我努力摆脱dll错误但是我找到的替代方法是不使用自定义操作并使用wix文件中的XML创建注册表,然后在卸载时通过使用以下方法删除密钥:
ForceDeleteOnUninstall="yes"
你必须在中使用它
示例:
<!-- Register windows autostart registry -->
<Component Id="RegistryEntries" Guid="45C7AC46-1101-4301-83E1-D24392283A60">
<RegistryValue Type="string"
Name="FooStartup"
Value="[#FooMainApp]"
Root="HKLM"
Key="Software\Microsoft\Windows\CurrentVersion\Run"
Action="write"/>
</Component>
发现于:Registry change upon installing application C#
我真的希望这能帮助WiX新手,就像对我一样。
答案 2 :(得分:1)
在自定义操作代码中使用这三个属性。
<CustomAction ....
Execute="deferred"
Impersonate="no"
Return="ignore" />
这些字段将使自定义操作与admin priveleges一起运行。