2015-09-21 55 views
0

我需要客戶端以輕度自定義代碼下載MSI以設置唯一的註冊表值。當他們安裝MSI時,我需要知道他們的客戶端ID,而不必輸入它們。特別是因爲MSI將通過組策略進行部署。實時生成MSI文件

在我的測試階段,我已經硬編碼的註冊表項,在我的維克斯安裝程序:

<RegistryValue Type="integer" Name="customer" Value="1" KeyPath="yes"/> 

我認爲產生一個「標準」 MSI和一個文本文件,其中包含客戶端ID拉上了起來,讓安裝程序讀取它並寫入註冊表 - 但我寧願讓一個文件管理員可以從他們的「門戶網站」下載並安裝。

我也考慮過在IIS中設置一個Windows服務器,並使用在Visual Studio中開發的簡單Web應用程序來接受?client_id = blah參數,然後在後臺生成MSI,然後將其返回到HTTP響應中。雖然這看起來是一個很好的解決方案,但在.NET開發方面,我非常不喜歡。

是否有任何工具或技巧提供這樣的自定義生成按需MSI?

理想情況下,我喜歡'免費'的解決方案,但我意識到可能沒有任何解決方案。我願意接受支付服務或購買軟件包的解決方案。

回答

1

我會將您的客戶端ID列入屬性,然後編寫一些自定義自動化以生成修改MSI的副本,然後根據需要編碼。用戶然後下載MSI的副本。

這是幾乎任何語言都可以使用的最少量的代碼。

+0

昨晚我只睡了兩個小時,但我設法做到了。我構建了一個啓動msbuild進程的IHttpHandler,然後抓取MSI文件並將其返回。只需要24行代碼。可能不是最乾淨的解決方案,但我相當驚訝的是,我可以把這些小代碼捆綁在一個WIndows服務器上,並在幾秒鐘內建立起來......我仍然遇到併發問題(一次只能運行一個構建),但它工作正常。 ;) –

+0

真的不應該有任何需要一遍又一遍地構建MSI。你只需要改變它。 –

+0

原因是我想要一個客戶下載* one *文件,並且能夠通過活動目錄(無需轉換)將其部署,或者將該文件提供給用戶,並讓他們雙擊安裝(從命令行進行轉換對於凡人來說很難),我不希望他們在安裝時必須輸入他們的客戶編號。 (客戶號碼將成爲GUID)。 ......除非我完全誤解轉換工作的方式嗎? –