[英]How do I deploy a Visual Studio addin with an installer like MSI?
[英]How do I read the msi output folder in a custom boostrapper/installer?
我啟動了一個Windows Forms項目,實質上它將下載幾個Zip文件,解壓縮它們並運行安裝程序.msi
加上它必須能夠要求在其中一個創建的網站中替換SQL連接值。安裝程序
例如:
http://domain.com/apps/site.zip
下載Web Proeject安裝程序並進行安裝 http://domain.com/apps/mscharts.zip
下載MS Charts並安裝它 web.config
這就是我想要做的,我知道我可以使用DotNetInstaller甚至是Wix ,但是這兩個項目都很龐大且學習曲線很高,所以我創建了自己的安裝程序。
我的問題是 ,在我運行Process
安裝Web設置(Visual Studio創建的msi
)之后,如何獲取用戶選擇安裝站點的完整路徑?
這需要找出web.config
文件的位置,以便正確附加新的SQL Server連接值。
site.msi
只使用int returnCode = process.ExitCode;
返回一個整數值int returnCode = process.ExitCode;
從來沒有輸出路徑..
只是大聲思考
我可能可以在site.msi
上創建一個自定義函數,將一些值寫入Registry ,然后我可以安全地閱讀我的自定義安裝程序......這是一個可行的選擇嗎?
在這樣的環境中我能做些什么 ?
我的問題是,在我運行Process安裝Web設置(Visual Studio創建的msi)之后,如何獲取用戶選擇安裝站點的完整路徑?
通常的方法是在注冊表中編寫它:
在[制造商]下添加一個新密鑰並命名
[產品名稱]
在這個新鍵中添加一個帶有此值的字符串條目:
[TARGETDIR]
這樣,MSI將在該注冊表值中寫入安裝路徑。 然后,您的安裝程序可以從注冊表中讀取路徑
您可以使用WMI搜索設置的MSI安裝程序web.config組件:
首先,您必須確定web.config組件的組件GUID。 使用Microsoft Orca工具打開MSI安裝程序包(您將在Windows 7 SDK中找到Orca工具)。
導航到File表 。 在FileName列中搜索web.config。 記住Component_列中web.config組件的ID。
然后導航到Component表 。 使用文件表中的ID搜索您的組件。
復制在ComponentId列中找到的GUID。 這是web.config文件的組件GUID。 現在,使用以下代碼中確定的組件GUID:
ManagementScope scope = new ManagementScope("\\\\\\\\.\\\\ROOT\\\\cimv2"); ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_SoftwareElement WHERE SoftwareElementID='{YOUR WEB CONFIG GUID}'"); ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query); ManagementObjectCollection queryCol = searcher.Get(); foreach(ManagementObject m in queryCol) { Console.Out.WriteLine("Path to web.config: {0}", m["Path"]); }
出於同樣的原因,創建自定義安裝程序操作以將安裝路徑寫入注冊表也是一個好主意!
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.