【问题标题】:WiX Installer InstallPrivelges="elevated" not workingWiX 安装程序 InstallPrivelges="elevated" 不起作用
【发布时间】:2014-06-14 14:02:54
【问题描述】:

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

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

【问题讨论】:

  • 令人讨厌的是我什至无法测试安装程序的其余部分,因为当我右键单击 .msi 文件时,它不允许我以管理员身份手动启动。
  • 您找到解决方案了吗?我陷入了一个非常相似的问题,这让我发疯!
  • @jcansdale 恐怕只是整个线程中的内容。我这样做已经有一段时间了。
  • 感谢您的更新。调试安装程序对我来说一直是一个痛苦的世界。我会继续加油的。 ;)

标签: wix installation


【解决方案1】:

您的自定义操作是即时的,这意味着它不会随海拔运行。必须延迟以高程运行。它与 WiX 无关,只是即时自定义操作以用户身份运行但受到限制。

【讨论】:

  • 呸,你和@123r789 的答案都非常有效,你的答案就是对他的代码的解释:)
【解决方案2】:

我努力摆脱 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 的人。

【讨论】:

    【解决方案3】:

    在自定义动作标签中使用这三个属性。

    <CustomAction ....
    Execute="deferred" 
    Impersonate="no" 
    Return="ignore" />
    

    这些字段将使自定义操作以管理员权限运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-17
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多