2012-07-05 69 views
0

在我們的維克斯安裝程序的項目,我們需要生成一個新的文件,讓我們稱之爲FILEB的基礎上,部署的文件,名爲FILEA在託管自定義操作功能。換句話說,在組件聲明中,我聲明瞭FileA。在自定義操作中(發生在提交階段),我需要基於FileA生成FileB。之後,由於FileA不再使用,我想在相同的自定義操作中將其刪除。無法安裝過程中刪除部署文件與維克斯安裝

在這裏,問題來了:默認安裝文件夾,這是程序文件,普通用戶是不允許添加文件(生成FILEB)到這個文件夾中的自定義操作(我不是100%肯定我對,但在我的測試中就是這樣,如果我將它安裝在另一個文件夾中,則根本沒有問題)。所以我想我需要授予創建文件的權限。爲了做到這一點,我將CreateFolder元素添加到包含FileA的組件中。整個組件的聲明是這樣的:

<Component Id='COMPONENT_NAME' Guid='MY_GUID'> 
    <!--OTHER FILES IN THE COMPONENT--> 
    ... 
    <CreateFolder Directory='INSTALLDIR'> 
     <Permission CreateFile='yes' User='Everyone' GenericAll='yes' Delete='yes'/> 
    </CreateFolder> 
    <File Id='MyFileA' Name='FileA' Source='PATH_TO_FILEA' KeyPath='no' > 
     <Permission GenericAll='yes' User='Everyone' Delete='yes'/> 
    </File> 
    </Component> 

組件實際上屬於組件組,它駐留在INSTALLDIR。在同一個組件元素中存在其他文件的原因是因爲我希望另一個文件成爲關鍵路徑,因此刪除FileA不會導致此問題。現在FileB的生成工作正常。但後來在相同的自定義操作中,刪除FileA時遇到了問題。它只是說:「訪問路徑'DEPLOYMENT_PATH_TO_FILEA'被拒絕。」我認爲問題在於FileA聲明,這就是爲什麼我在File下的Permission元素中添加了Delete ='yes',希望能夠將其刪除(雖然我不確定這是否意味着在安裝中可能刪除)。但是我仍然得到這個錯誤。誰能告訴我我做錯了什麼?

的另一個問題是,我真的不知道什麼是那些CreatFolder元素的目的。首先,如果目標是創建目錄結構,我認爲(嵌套的)目錄元素已經這樣做了。爲什麼在Component元素下面有這樣的元素時,大多數情況下你可能希望目錄結構與組件結構分離(組件只是使用目錄引用來引用正確的目錄)。其次,CreateFolder的默認目錄屬性是組件所在的父目錄。但是,通常多個組件駐留在同一個目錄中,就像我在這裏:多個組件位於同一個組件組中,其目錄元素引用INSTALLDIR。所以這些組件中只有一個具有CreateFolder元素,在我的情況下其Directory屬性是所有這些組件的父目錄。這種結構很難理解。我想我對CreateFolder元素有一些誤解。有人可以啓發我使用CreateFolder嗎?謝謝!

謝謝!

回答

4

有一些問題解決在這裏。首先,如果回滾被禁用,您應該知道Commit階段的自定義操作不會執行。你應該真的有一個延期和回滾自定義操作。

其次,你不能告訴MSI安裝文件,然後再刪除它。這是適得其反的,只會引起維修問題。更好的解決方案(我假設您使用的是WiX DTF託管的自定義操作)是將FileA作爲內容項包含在自定義操作項目中。這將導致文件在執行時存在於自定義操作的當前(temp)目錄中。然後你可以生成fileb。對於回滾,您可以刪除fileb。

您還需要創作一RemoveFile元素教微星刪除卸載文件。否則,它不會因爲MSI不知道您的進程外自定義操作所創建的任何有關fileb的信息。

否則這將會是有用知道FILEB的內容。如果這是一個xml文件,可以安裝爲fileb,然後使用xml wix擴展名進行轉換,那將更容易實現。

+0

謝謝克里斯託弗,他們真的是有用的建議。我將修改我的WIX項目。該例程是從我們現有的Windows Installer項目中複製而來的。但我也明白你的意思是要刪除安裝中的已部署文件。順便說一句,FileA是一個mdb文件,FileB是mde文件 – tete 2012-07-06 06:15:14

+1

是否有一個原因,你不能將你的mdb轉換爲mde作爲構建過程的一部分,然後部署mde文件?我在這裏沒有經驗,所以我不知道你可能試圖解決的問題。 – 2012-07-06 17:26:43

+0

說實話,我也沒有這方面的經驗,雖然我問自己同樣的問題。因爲這就是我們當前的Windows Installer Project的工作原理,而我只是創建另一個部署項目的人:)我不熟悉Access編程。 – tete 2012-07-09 06:58:21