2010-05-25 57 views
0

我希望我的msi安裝程序在特定位置生成一組文件夾,並在每個目錄中放置一個虛擬文件。從文本文件創建文件夾並使用自定義動作在其中放置虛擬文件

目前,我有以下CustomActions:

<CustomAction Id="SMC_SetPathToCmd" Property="Cmd" Value="[SystemFolder]cmd.exe"/> 
<CustomAction Id="SMC_GenerateMovieFolders" Property="Cmd" ExeCommand="for /f &quot;tokens=* delims= &quot; %a in ([MBSAMPLECOLLECTIONS]movies.txt) do (echo %a)" /> 
<CustomAction Id="SMC_CopyDummyMedia" Property="Cmd" ExeCommand="for /f &quot;tokens=* delims= &quot; %a in ([MBSAMPLECOLLECTIONS]movies.txt) do (copy [MBSAMPLECOLLECTIONS]dummy.avi &quot;%a&quot;\&quot;%a&quot;.avi)" /> 

這些被稱爲在InstallExecuteSequence:

<Custom Action="SMC_SetPathToCmd" After="InstallFinalize"/> 
    <Custom Action="SMC_GenerateMovieFolders" After="SMC_SetPathToCmd"/> 
    <Custom Action="SMC_CopyDummyMedia" After="SMC_GenerateMovieFolders"/> 

的自定義操作似乎開始,但只顯示一個空白的命令提示符窗口和目錄不會生成。

所需customaction文件複製到正確的目錄:

<Directory Id="WIX_DIR_COMMON_VIDEO"> 
    <Directory Id="MBSAMPLECOLLECTIONS" Name="MB Sample Collections" /> 
    </Directory> 

<DirectoryRef Id="MBSAMPLECOLLECTIONS"> 
    <Component Id="SampleCollections" Guid="C481566D-4CA8-4b10-B08D-EF29ACDC10B5" DiskId="1"> 
    <File Id="movies.txt" Name="movies.txt" Source="SampleCollections\movies.txt" Checksum="no" /> 
    <File Id="series.txt" Name="series.txt" Source="SampleCollections\series.txt" Checksum="no" /> 
    <File Id="dummy.avi" Name="dummy.avi" Source="SampleCollections\dummy.avi" Checksum="no" /> 
    </Component> 
</DirectoryRef> 

出了什麼問題,這些自定義操作還是有一個簡單的方法來做到這一點?

回答

-1

顯而易見的問題是,這些自定義操作排序的方式,他們不能正確支持託管(提升/ UAC)的instal或有任何MSI維修,回滾,卸載,升級視角的服務概念。

如果不知道自己在做什麼,很難給出確切的建議。我最近知道我有一位客戶,他的SDK有一些他希望按用戶安裝的「樣本」。我說服這位客戶只分發ZIP文件並編寫一個簡單的Winforms應用程序,可以處理詢問用戶幾個問題並將這些文件解壓縮到用戶選擇的目錄中。通過這種方式,他們可以部署多個樣品實例,與他們一起玩,刪除他們,而不用踩在MSI的腳趾上。

相關問題