wix - 在 WiX 中更改 TARGETDIR

标签 wix wix3.6

我在设置 TARGETDIR 路径时遇到问题。我用过 dark.exe反向工程一个有效的 MSI 文件并阅读我能找到的关于这个主题的任何帖子,但我似乎无法将 TARGETDIR 设置为指向路径 ProgramFiles\Manufacturer\Product .下面是我的 WXS 文件的一个提炼,它导致我的应用程序由于某种原因被安装到我的 D 驱动器的根目录:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="*"
             Name="FBL - Some App"
             Language="1033"
             Version="1.0.0.0"
             Manufacturer="Foo &amp; Bar Limited"
             UpgradeCode="780286c6-e064-4402-80d8-dd2c68b56c04">
        <Package InstallerVersion="200"
                 Compressed="yes"
                 InstallScope="perMachine"
                 Comments="Performs some operation that is important" />

        <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
        <Media Id="1" Cabinet="App.1.0.0.cab" EmbedCab="yes" />
        <CustomAction Id="setTARGETDIR"
                      Property="TARGETDIR"
                      Value="[ProgramFilesFolder][Manufacturer]\[ProductName]"
                      Execute="firstSequence"
                      Return="check" />

        <Directory Id="TARGETDIR" Name="SourceDir">
            <Component Id="C__App.exe"
                       Guid="{074586E9-A675-2734-A4CD-1CE520922A41}">
                <File Id="F__App.exe"
                      Name="App.exe"
                      KeyPath="yes"
                      Assembly=".net"
                     AssemblyManifest="F__App.exe"
                      AssemblyApplication="F__App.exe"
                      DiskId="1"
                      Source="D:\SomePath\bin\Debug\App.exe" />
            </Component>
        </Directory>
        <Feature Id="DefaultFeature" ConfigurableDirectory="TARGETDIR" Level="1">
            <ComponentRef Id="C__App.exe" Primary="yes" />
        </Feature>
        <Icon Id="favicon.ico" SourceFile="d:\SomePath\favicon.ico" />
        <Property Id="ARPPRODUCTICON" Value="favicon.ico" />
        <UI />
        <InstallExecuteSequence>
            <Custom Action="setTARGETDIR" Before="CostFinalize" />
        </InstallExecuteSequence>
    </Product>
</Wix>

我确定我遗漏了一些简单的东西,但我无法从这里找到有关该做什么的更多信息。

最佳答案

需要进行以下修改:

<CustomAction Id="SetTARGETDIR"
              Directory="TARGETDIR"
              Value="[ProgramFilesFolder][Manufacturer]\[ProductName]"
              Return="check" />


<InstallExecuteSequence>
    <Custom Action="SetTARGETDIR" After="InstallValidate" />
</InstallExecuteSequence>

说明:使用 Directory 属性而不是属性(它是类型 35 的自定义操作)并将此操作安排在 InstallValidate 之后。在执行序列中 - 那是检查目录的写访问权限并真正设置的时间。

(感谢来自 WiX 用户组的 Narina Chandra Sekhar 对此的回答。)

关于wix - 在 WiX 中更改 TARGETDIR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13057263/

相关文章:

visual-studio-2010 - 如何在 WiX 3.6 中包含依赖于配置的项目输出

WiX:当封装在 Burn/EXE 中时,如何显示 MSI 的对话框?

windows - Windows Installer在Win 10上失败,但在使用WIX的Win 7上失败

crystal-reports - Wix 引导。检查 Sap Crystal reports 是否已安装

WiX - 设置 MSI 的程序名称

mongodb - 使用 WiX 工具集安装程序安装 mongodb 并启动 mongodb 服务

visual-studio-2010 - VS2010 + Wix 3.6中将组件绑定(bind)到wixlib

installation - WIX : Maintenance option does not support add feature option

wix - 如何使用 Wix 进行 x86 编译安装在 System 32 文件夹上