2012-10-24 13 views
5

Mam problemy z ustawieniem ścieżki TARGETDIR. Użyłem dark.exe do inżynierii wstecznej działającego pliku MSI i przeczytałem wszystkie posty, które mogłem znaleźć na ten temat, ale wydaje mi się, że nie mogę ustawić TARGETDIR tak, aby wskazywał ścieżkę ProgramFiles\Manufacturer\Product. Poniżej znajduje się destylacją mojego pliku WXS co skutkuje w mojej aplikacji są zainstalowane do korzeni mojego D-drive z jakiegoś powodu:Zmiana TARGETDIR w 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> 

jestem pewien, że jestem brakuje czegoś proste, ale nie mogę znaleźć żadnego dalszego informacje o tym, co należy zrobić z tego miejsca.

Odpowiedz

5

następujące modyfikacje były potrzebne:

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

i

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

Objaśnienie: Użyj katalog atrybutów zamiast nieruchomości (jest to zwyczaj działania typ 35) i zaplanować tę akcję po InstallValidate w sekwencja wykonania - wtedy katalogi są sprawdzane pod kątem zapisu i naprawdę ustawione.

(Dzięki Narina Chandra Sekhar, z grupy użytkownika WiX na odpowiedź w tej sprawie.)

2

To dziwne ... Miałem ten sam problem, ale odpowiedź nie działa dla mnie. Wszystko, co było potrzebne to:

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

Ale potem znowu myślę, że coś innego w moim instalator może zostały ustalone katalog TARGETDIR od nieruchomości; Pracowałem z niektórymi starszymi rzeczami.

Edytuj: Właściwie to był zły pomysł. Wiele razy, niektóre z tych niestandardowych akcji, które są wbudowane, można wywoływać w różnych częściach procesu instalacji, więc lepiej jest dodać niestandardowe działanie, aby ustawić właściwość.

Oto co pracował dla mnie:

<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

Nic nie pracował dla mnie to co zrobiłem jest uruchomienie msi z wiersza poleceń ustawienie właściwości katalogu instalacyjnym. Domyślnie mój program zostanie zainstalowany na dysku C, ale czasami chciałem być zainstalowany na dysku D Więc tutaj jest to, co robiłam:

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

Oto wiersz poleceń:

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