2012-08-15 143 views
0

過程中有不同的副本策略在安裝過程中,我的申請將:維克斯 - 如何安裝

步驟A,尋找C:\WebService目錄。如果發現以下做:

copy *.bat  --> C:\WebService\ 
copy boost*.dll --> C:\WebService\libs\ 
copy myApp.dll --> C:\WebService\plugins\ 

步驟B,如果沒有找到,就如下:

copy *.bat --> [LocalAppData]\myApp\bin\ 
copy *.dll --> [LocalAppData]\myApp\libs\ 

我怎樣才能做到這一點?

編輯:

我已經完成了第二步的:

  1. 創建源目錄:

    src\bin
    src\libs

  2. 將文件複製到這些子目錄

  3. 使用heat掃描src目錄並生成組到wxs文件。

這裏的問題是,看起來像步驟A,我必須再次做同樣的事情。但是有很多* .dll,將它們複製到另一個目錄看起來不是一個好主意。

回答

0

好的,終於搞定了。

總之,我通過編寫一個C++程序來幫助。

詳情如下..

我WXS開始,如:

<Directory Id='TARGETDIR' Name='SourceDir'> 
    <Directory Id='WebDir'> 
     <Directory Id='INSTALLDIR' Name='$(var.ProductName)'/> 
    </Directory> 
    <Directory Id='DefaultDir'/> 
</Directory> 

現在使用heat收穫我的源目錄下生成的candlelight另一個WXS文件鏈接

然後進入我的C++程序,它被設計成

  1. 掃描整個生成的wxs文件以創建另一個目錄結構。
  2. 替換目錄,組件和文件的所有ID以使它們唯一。
  3. 爲所有新組件生成新的GUID。
  4. 收集所有新組件ID以創建新組件組。

這個新組件組可以參考有條件的安裝,取決於是否有一個註冊表項或目錄是否被發現,在我的情況下,它是:

<Feature Id='RuntimeChrome' Level='1'> 
    <Condition Level='0'>NOT INSTALLDIR_REGCU AND NOT INSTALLDIR_REGLM</Condition> 
    <ComponentGroupRef Id='WebGroup' /> 
    </Feature> 
    <Feature Id='RuntimeDefault' Level='1'> 
    <ComponentGroupRef Id='DefaultGroup' /> 
    </Feature> 

有了這些WXS文件,該軟件包可以安裝在不同場景下的不同地方。

3

你說這個問題的方式表明你在理解Windows Installer方面存在巨大差距。 MSI/WiX不是腳本語言。您需要了解AppSearch,功能,Directorties,組件和條件的工作方式。基本上你需要將文件分組到組件中,並使用AppSearch來檢測目錄是否存在。然後在條件中使用該搜索的結果來決定安裝哪些文件。

+0

編輯我的問題,多一點細節,對不起,我的無知 – Deqing 2012-08-15 13:17:32

+0

剛發現你的解決方案將被重複的目錄ID阻止 - http://stackoverflow.com/questions/8539762/how-to-change-the- generated-directory-id-for-wix-using-heat – Deqing 2012-08-16 03:45:00

+0

我沒有給你一個解決方案,我告訴過你要讀什麼。我不知道你的代碼是什麼樣的,但是如果你有重複的目錄ID,可以考慮將Directory元素放在一個片段中,並使用DirectoryRef元素在其他片段文件中使用它們。 – 2012-08-16 11:55:46