2012-10-24 14 views
5

Si verificano problemi durante l'impostazione del percorso TARGETDIR. Ho usato dark.exe per decodificare un file MSI funzionante e leggere tutti i post che potrei trovare su questo argomento, ma non riesco a impostare TARGETDIR in modo che punti al percorso ProgramFiles\Manufacturer\Product. Qui di seguito è una distillazione del mio file WXS che si traduce nella mia applicazione in fase di installazione alla radice del mio D-drive per qualche motivo:Modifica di TARGETDIR in WiX

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

Sono sicuro che mi manca qualcosa di semplice, ma non riesco a trovare ulteriori informazioni su cosa fare da qui. sono stati necessari

risposta

5

le seguenti modifiche:

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

e

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

Spiegazione: utilizzare la directory attributo invece di una proprietà (è un'azione personalizzata di tipo 35) e programmare questa azione dopo InstallValidate in la sequenza di esecuzione, ovvero quando le directory vengono controllate per l'accesso in scrittura e impostate veramente.

(Grazie a Narina Chandra Sekhar, dal gruppo di utenti WiX per la risposta su questo.)

2

Questo è strano ... Ho avuto lo stesso problema, ma la risposta non ha funzionato per me. Tutto quello che serviva era questo:

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

Ma poi di nuovo penso che qualcosa di diverso nel mio programma di installazione potrebbe essere stata l'impostazione della directory TARGETDIR dalla proprietà; Stavo lavorando con alcune cose legacy.

Modifica: In realtà, era una cattiva idea. Molte volte, alcune di queste azioni personalizzate incorporate possono essere richiamate in diverse parti del processo di installazione, quindi è solo meglio aggiungere un'azione personalizzata per impostare la proprietà.

Ecco cosa ha funzionato per me:

<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

Niente ha funzionato per me, così quello che ho fatto è quello di eseguire l'MSI con un impostando la proprietà della directory di installazione da riga di comando. Per impostazione predefinita, il mio programma sarebbe stato installato all'unità C, ma a volte ho voluto che fosse installato per l'unità D: ecco quello che ho fatto:

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

Ecco la riga di comando:

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

Problemi correlati