簡體   English   中英

如何在自定義boostrapper / installer中讀取msi輸出文件夾?

[英]How do I read the msi output folder in a custom boostrapper/installer?

我啟動了一個Windows Forms項目,實質上它將下載幾個Zip文件,解壓縮它們並運行安裝程序.msi加上它必須能夠要求在其中一個創建的網站中替換SQL連接值。安裝程序

例如:

  1. http://domain.com/apps/site.zip下載Web Proeject安裝程序並進行安裝
  2. http://domain.com/apps/mscharts.zip下載MS Charts並安裝它
  3. 詢問服務器,數據庫,用戶名和密碼,並替換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)之后,如何獲取用戶選擇安裝站點的完整路徑?

通常的方法是在注冊表中編寫它:

  • 在Visual Studio安裝項目中轉到注冊表編輯器
  • 選擇HKEY_LOCAL_MACHINE下或HKEY_CURRENT_USER下的“軟件[制造商]”鍵
  • 在[制造商]下添加一個新密鑰並命名

    [產品名稱]

  • 在這個新鍵中添加一個帶有此值的字符串條目:

    [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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM