2012-03-05 109 views
0

我希望能夠取代封裝在我們的MSI與用戶提供了一個外部文件(它覆蓋一些設置特定於該公司安裝位置軟件)以及將文件的文件夾(可能會或可能不存在,內容頻繁更改)複製到目標文件夾中。可以將文件複製到與MSI /自定義操作

我目前的做法是有文件夾和文件夾中或CD上與MSI文件一起,並使用自定義操作,以尋找在同一文件夾中MSI文件夾和文件。只要安裝程序從本地計算機運行,這就可以正常工作。當安裝程序從聯網位置運行時,由於權限受限,自定義操作無法訪問msi所在的文件夾。

有沒有辦法讓周圍的權限問題,或者是有得到這些文件各得其所的更好的辦法?

+0

如果你只是想使你的安裝程序的一些文件交換性,你可以設置「PackageAs = vsdpaLoose」。然後這些文件與msi在同一個文件夾中。如果不需要,你也可以設置「Vital = false」。在安裝項目中,他們被視爲msi的一部分。 – nik 2012-03-05 17:00:09

+0

@milter這是一個不錯的主意,但Vital = False並不適用,因爲如果安裝程序無法找到該文件,它仍會失敗。似乎該屬性只有當msi已經嘗試安裝該文件並且失敗時纔會關注。 – Septih 2012-03-07 10:08:54

+0

是的,你說得對,對不起。相當我之前我擺弄那個。安裝程序仍會失敗,但提供忽略和繼續的選項。所以它會成功完成安裝,但對用戶來說看起來不錯。不過,你可以使用一個容器文件,它可以是空的或不是(例如zip)。 – nik 2012-03-07 14:34:32

回答

0

我對這個解決方案是自定義操作期間存儲微星的位置在安裝目錄中的文件,然後實際的程序中使用該位置找到外部文件,並將它們複製整個(如程序有訪問他們)。這不是優雅的,但它似乎適用於已經嘗試過的客戶。

0

要與自定義操作所有情況下工作,你需要兩個動作。第一次運行模擬(非系統上下文),並從源位置複製到諸如TempFolder之類的東西。第二次運行時沒有模擬(系統上下文),並從TempFolder複製到預期的目標位置。

您還可以探索一種稱爲semi-custom actions的技術,其中您在運行時用信息填充DuplicateFileMoveFile表。理想情況下,這可以讓您利用內置功能,並且仍然可以獲得所需的訪問權限,但我沒有親自驗證該行爲。

+0

默認情況下,應該使用模擬運行自定義操作,對吧?我知道我們有一個腳本來爲這個動作設置noimpersonate位,但即使刪除了該動作也無法訪問源目錄。我會看看半自定義操作,但他們看起來像使用wix而不是使用visual studio工具時更容易。 – Septih 2012-03-05 14:04:35

相關問題