2016-08-15 21 views
0

我有一臺每臺機器的WiX安裝程序(InstallScope =「perMachine」InstallPrivileges =「elevated」),我需要創建一個文件夾並將幾個文件複製到運行應用程序的每個用戶的Documents文件夾。此刻,我的文件安裝到當前用戶的個人文件夾,但這是錯誤的,我得到了ICE91驗證警告:在每臺計算機安裝過程中安裝每個用戶文件的正確方法

ICE91: The file 'SomeFile' will be installed to the per user directory 'SomeDir' 
that doesn't vary based on ALLUSERS value. This file won't be copied to each 
user's profile even if a per machine installation is desired. 

我要的文件將被自動複製到每個用戶的文檔文件夾。有人可以發佈一步一步的指導如何做到這一點?

更新:我將休假到9月份,在此期間我將無法回覆任何評論。

回答

2

你爲什麼要這樣做?如果機器上有10000個用戶(例如),該怎麼辦?您想將文件複製到所有10000個文檔文件夾,佔用可能的GB空間(取決於複製文件的大小)?如果這些是您的應用程序所需的配置選項,則應用程序本身應在第一次運行時在用戶的文檔位置創建默認文件(如果它們不存在),否則將從這些文件加載​​設置。您不應該在安裝時爲機器上的每個用戶放置默認文件。

此方法在安裝後添加新用戶也失敗。他們將如何獲取文檔文件夾中的文件?他們是否必須重新安裝產品?

+0

我從另一位開發人員那裏繼承了一個項目,我不得不保留最初的設計,這將是一個突破性的改變,用戶不想將文件移動到其他地方。我問你同樣的問題 - 新用戶如何去獲取他們的文檔文件夾中的文件?這些文件很小,所以它不會是GB數據,工程師(我的軟件的用戶)通常不會在他們的機器上創建1000個用戶。 – RaceRalph

+0

這只是一個誇張的例子,以說明爲什麼我認爲這樣做是不好的做法。廣告方法似乎是你想要的,但讓它工作似乎很複雜。 –

4

Windows安裝程序將執行此操作 - 這是廣告快捷方式會執行的操作。如果將文件安裝到用戶特定的文件夾位置並且其他用戶登錄,那麼該用戶將缺少該文件,並且廣告的快捷修復的修復機制將從原始MSI文件安裝它。在你的情況下,PersonalFolder屬性是用戶的Documents文件夾。

要安排此操作,文件必須是組件的關鍵路徑,並且該組件必須位於具有公佈的快捷方式的功能中。使用快捷方式時,將檢查組件和包含功能的「自我修復」並安裝丟失的文件。這適用於尚不存在的用戶。較早的Office安裝程序曾經這樣安裝用戶特定的項目,如模板。

MSI顯然必須可用於此工作,並且沒有任何機制在卸載時刪除文件。

替代方案(或者如果沒有公佈的快捷方式)將代碼添加到調用MsiProvideComponment(或等效的p/invoke)傳遞產品代碼,功能名稱,組件id(該文檔文件)並使用INSTALLMODE_DEFAULT ,這將安裝該文件如果缺少如下記載:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa370356(v=vs.85).aspx

,它會丟失,因此將安裝誰沒有之前運行的應用程序的用戶。

+0

TIL,這甚至可能 –

+0

請注意,它需要原始.msi(和.cabs,如果外部)可用於每個用戶。 –

+0

我改變了廣告的功能,但沒有幫助。我安裝的所有文件都將其keypath屬性設置爲true,它們屬於添加到某個功能的組件組。少了什麼東西? – RaceRalph

0

考慮爲每個用戶安裝每檯安裝程序的快捷方式,感興趣的用戶可以啓動。例如,templates.msi,examples.msi。

相關問題