2012-08-16 37 views
0

很簡單的問題,假設我的應用程序將安裝爲維克斯 - 如何在安裝後更改名稱的目錄的

myApp 
+-- bin 
+-- lib 

我想重命名「LIB」到「插件」安裝後,如何能我那樣做?

有一個MoveFiles Element可能會幫助,但不知道如何使用它。

編輯:

這裏的問題是,在我的情況下,源文件可以安裝到不同的路徑,這種情況在here描述。

我能想出的唯一方法是創建兩個組件組並有條件地安裝它們。但是,使用heat收穫相同的子目錄兩次會造成ID conflicting,所以我想用不同的路徑(例如libanother-lib),然後重命名安裝後回來的路徑之一,所以這個問題arised ...

+0

您可以使用XSLT來'heat'輸出,並有重命名的目錄。但是,如果在安裝時必須將文件放入同一目錄,則最好收集相同的圖像。在收穫之前不能複製庫嗎? – 2012-08-17 06:51:51

回答

0

我終於寫了一個C++程序來擴展heat生成的wxs與另一個目錄結構。所以我們可以決定在不同情況下安裝哪條路徑。它在安裝過程中就像更改名稱一樣工作。

這是我的程序修補的wxs文件。基本上它會創建另一個目錄WEBIDR和不同的子目錄,然後添加另一個組件組webGroup供條件元素稍後參考。

您可以手動執行同樣的操作,但是如果有成千上萬的文件正在等待,並且它們經常更新,那麼程序(或腳本)可能是更好的選擇。

<Fragment> 
    <DirectoryRef Id="INSTALLDIR"> 
     <Directory Id="dirA5528701EE26FFBF346CCE20EE8ACE99" Name="bin"> 
      <Component Id="cmpEBA9C2A32D81BA8646BD1A64DBB39DB1" Guid="{142C531A-C71C-4890-9318-0FC42026C8FC}"> 
       <File Id="filDB56E052EC783676CEF361C0C5AA71F3" KeyPath="yes" Source="$(var.runDir)\bin\boost_date_time-vc100-mt-1_47.dll" /> 
      </Component> 
     </Directory> 
     <Directory Id="dir3279BEF4E08D9A00D2F205F325F00A81" Name="modules"> 
      <Component Id="cmpDECCAE13F8937500E4AC367A8EAC95F4" Guid="{85CC0C94-1BFB-4062-BC4E-FBF143921301}"> 
       <File Id="filDD3B40D68D0437B18B1108FBA49ABC1B" KeyPath="yes" Source="$(var.runDir)\modules\HelloAPI.dll" /> 
      </Component> 
     </Directory> 
    </DirectoryRef> 
    <DirectoryRef Id="WEBDIR"> 
     <Component Id="webcmpEBA9C2A32D81BA8646BD1A64DBB39DB1" Guid="{fec110c5-a1a0-4b07-8a35-50f1af84001a}"> 
      <File Id="webfilDB56E052EC783676CEF361C0C5AA71F3" KeyPath="yes" Source="$(var.runDir)\bin\boost_date_time-vc100-mt-1_47.dll" /> 
     </Component> 
     <Directory Id="webdirpluginF4E08D9A00D2F205F325F00A81" Name="plugins"> 
      <Component Id="webcmpDECCAE13F8937500E4AC367A8EAC95F4" Guid="{3ef79a47-7681-4991-9726-02db38c22f6d}"> 
       <File Id="webfilDD3B40D68D0437B18B1108FBA49ABC1B" KeyPath="yes" Source="$(var.runDir)\modules\HelloAPI.dll" /> 
      </Component> 
     </Directory> 
    </DirectoryRef> 
</Fragment> 
<Fragment> 
    <ComponentGroup Id="runGroup"> 
     <ComponentRef Id="cmpEBA9C2A32D81BA8646BD1A64DBB39DB1" /> 
     <ComponentRef Id="cmpDECCAE13F8937500E4AC367A8EAC95F4" /> 
    </ComponentGroup> 
    <ComponentGroup Id="webGroup"> 
     <ComponentRef Id="webcmpEBA9C2A32D81BA8646BD1A64DBB39DB1" /> 
     <ComponentRef Id="webcmpDECCAE13F8937500E4AC367A8EAC95F4" /> 
    </ComponentGroup> 
</Fragment> 

3

不要。在前面正確安裝文件。 Windows安裝程序跟蹤事物的方式將會在每一步中與您對抗。只需將文件從頭安裝到正確的文件夾中即可。可能不是你想要的答案。

+0

感謝您的回覆。已更新我的問題更多細節 – Deqing 2012-08-16 09:49:28