Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在WiX中更改TARGETDIR_Wix_Wix3.6 - Fatal编程技术网

在WiX中更改TARGETDIR

在WiX中更改TARGETDIR,wix,wix3.6,Wix,Wix3.6,我在设置TARGETDIR路径时遇到问题。我使用dark.exe对一个正在工作的MSI文件进行反向工程,并阅读关于这个主题的任何帖子,但我似乎无法将TARGETDIR设置为指向路径ProgramFiles\Manufacturer\Product。以下是我的WXS文件的一个distilation,它导致我的应用程序由于某种原因被安装到我的D-drive的根目录中: <?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http:/

我在设置TARGETDIR路径时遇到问题。我使用
dark.exe
对一个正在工作的MSI文件进行反向工程,并阅读关于这个主题的任何帖子,但我似乎无法将TARGETDIR设置为指向路径
ProgramFiles\Manufacturer\Product
。以下是我的WXS文件的一个distilation,它导致我的应用程序由于某种原因被安装到我的D-drive的根目录中:

<?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" />


说明:使用目录属性而不是属性(这是一个35型自定义操作),并在执行序列中的
InstallValidate
之后安排此操作-此时将检查目录的写访问并真正设置


(感谢WiX用户组的Narina Chandra Sekhar给出了这个问题的答案。)

这很奇怪……我也有同样的问题,但你的答案对我不起作用。我所需要的就是:

<Product>
   <SetProperty Id='TARGETDIR' Value='[ProgramFilesFolder][Manufacturer]\[ProductName]\' Before='FindRelatedProducts' />
   ...
</Product>

...
但是,我想我的安装程序中的其他东西可能已经从属性设置了TARGETDIR目录;我在处理一些遗留的东西

编辑:实际上,那是个坏主意。很多时候,内置的一些自定义操作可以在安装过程的不同部分调用,因此最好添加自定义操作来设置属性

以下是对我有效的方法:

<Product>
   <CustomAction Id='SetTARGETDIR' Property='TARGETDIR' Value='[ProgramFilesFolder][Manufacturer]\[ProductName]\'/>
   ...
</Product>
<InstallUISequence>
   <Custom Action='SetTARGETDIR' Sequence='1'/>
   ...
</InstallUISequence>
<AdminUISequence>
   <Custom Action='SetTARGETDIR' Sequence='1'/>
   ...
</AdminUISequence>

...
...
...

对我来说什么都不管用,所以我所做的就是用命令行设置安装目录的属性来运行msi。默认情况下,我的程序将安装到驱动器C,但有时我希望将其安装到驱动器D,因此我所做的如下:

<Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
               <Directory Id="APPLICATIONROOTDIRECTORY" Name="XServer">                     
               </Directory>
            </Directory>
</Directory>

以下是命令行:


XServer.msi/L*v log.log APPLICATIONROOTDIRECTORY=“D:\Program Files(x86)\XServer”

这实际上对我很有效。
CostFinalize
操作是定义
TARGETDIR
目录的地方

<SetProperty Id="TARGETDIR" Value="[ROOTDRIVE]MyCompany" Sequence="first" Before="CostFinalize">NOT Installed AND NOT TARGETDIR</SetProperty>
未安装且不是TARGETDIR

我尝试通过自定义操作更改安装目录(因为我需要代码来找出代码路径-长话短说),是什么为我解决了问题-时间安排-我必须将自定义操作安排为:

After="CostInitialize"

我认为使用
SetProperty
没有区别,只要在正确的位置使用,也就是在
CostFinalize
操作之前。比较我的
After="CostInitialize"