WiX安装程序InstallPrivelges =“提升”无法正常工作

时间:2014-04-28 20:55:33

标签: wix installer

当我运行安装程序时,我遇到以下问题。

error

我正在做一些需要访问注册表的自定义操作,我只能认为它是因为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错误仍然存​​在..

3 个答案:

答案 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一起运行。