2012-10-24 13 views
5

TARGETDIRパスの設定に問題があります。私はdark.exeを使用して作業中のMSIファイルをリバースエンジニアリングし、この件で見つけた投稿を読んでいますが、TARGETDIRを設定してパスProgramFiles\Manufacturer\Productを指すことができないようです。以下は、私のアプリケーションが何らかの理由で私のDドライブのルートにインストールされ、その結果、私のWXSファイルのdistilationです:WiXのTARGETDIRを変更する

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

私は、単純な何かが欠けています確信しているが、私はそれ以上を見つけることができませんここから何をするかに関する情報。

答えて

5

以下の変更が必要であった:

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

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

を説明:propertyの代わりにDirectory属性を使用します(それはタイプ35カスタムアクションだ)とでInstallValidate後にこのアクションをスケジュールしますディレクトリの書き込みアクセスがチェックされ、真に設定されたときのシーケンスです。

は(この上の解答のためのWiXユーザグループからNarinaチャンドラSekharのおかげで、。)

2

これは奇妙である...私は同じ問題があったが、あなたの答えは私のために動作しませんでした。私は必要なすべては、このでした:

<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> 
0

何も私は何をしたか私のために働いていないインストールディレクトリのプロパティを設定するコマンドラインで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"

関連する問題