2012-10-24 28 views
5

我在設置TARGETDIR路徑時遇到問題。我使用dark.exe來逆向工程一個可用的MSI文件並閱讀有關此主題的任何帖子,但我似乎無法將TARGETDIR設置爲指向路徑ProgramFiles\Manufacturer\Product。下面是我的WXS文件的distilation導致我的應用程序安裝到我的d-驅動器由於某些原因的根源:更改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> 

說明:在使用目錄的屬性,而不是一個屬性(這是一個35型自定義操作),並安排這個動作InstallValidate後執行順序 - 即當目錄被檢查寫訪問並真正設置時。

(感謝Narina錢德拉Sekhar,從這個答案的WiX的用戶組。)

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」