2012-10-24 12 views
5

Ich habe Probleme beim Einstellen des TARGETDIR-Pfades. Ich habe dark.exe verwendet, um eine funktionierende MSI-Datei zurückzuentwickeln und alle Posts zu lesen, die ich zu diesem Thema finden konnte, aber es scheint mir unmöglich zu sein, das TARGETDIR auf den Pfad ProgramFiles\Manufacturer\Product zu setzen. Im Folgenden wird ein distilation meiner WXS-Datei, die aus irgendeinem Grund an der Wurzel meines D-Laufwerk installiert in meiner Anwendung dazu führt, dass:Das TARGETDIR in WiX ändern

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

Ich bin sicher, dass ich einfach bin etwas fehlt, aber ich weiter nicht finden können, Informationen darüber, was Sie von hier aus tun können.

Antwort

5

Die folgenden Änderungen wurden benötigt:

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

und

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

Erläuterung: anstelle einer Eigenschaft, um die Verzeichnis-Attribut (es eine benutzerdefinierte Aktion Typ 35 ist) und diese Aktion planen nach InstallValidate in die Ausführungssequenz - das ist, wenn Verzeichnisse auf Schreibzugriff geprüft und wirklich gesetzt werden.

(Dank Narina Chandra Sekhar, von der WiX Benutzergruppe für die Antwort auf diese.)

2

Das ist seltsam ... Ich hatte das gleiche Problem, aber die Antwort nicht für mich arbeiten. Alles, was ich brauchte, war dies:

<Product> 
    <SetProperty Id='TARGETDIR' Value='[ProgramFilesFolder][Manufacturer]\[ProductName]\' Before='FindRelatedProducts' /> 
    ... 
</Product> 
Aber dann wieder denke ich, etwas anderes in meinem Installateur das TARGETDIR Verzeichnisses aus der Eigenschaft Einstellung gewesen sein; Ich habe mit Legacy-Sachen gearbeitet.

Bearbeiten: Eigentlich war das eine schlechte Idee. Häufig können einige dieser benutzerdefinierten Aktionen in verschiedenen Teilen des Installationsprozesses aufgerufen werden. Daher ist es besser, eine benutzerdefinierte Aktion hinzuzufügen, um die Eigenschaft festzulegen.

Hier ist, was für mich gearbeitet:

<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

Nichts für mich gearbeitet, so was ich ist habe die msi mit einer Befehlszeile ausführen, um die Eigenschaft des Installationsverzeichnisses einstellen. Standardmäßig würde mein Programm installiert sein C zu fahren, aber manchmal wollte ich es D-Laufwerk installiert werden, damit hier ist das, was ich getan habe:

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

Hier wird der Zeilenbefehl ist:

XServer.msi/L * v log.log APPLICATIONROOTDIRECTORY = "D: \ Programme (x86) \ XServer"

Verwandte Themen