翻譯|使用教程|編輯:況魚杰|2019-12-23 15:00:24.687|閱讀 787 次
概述:MSI原始安裝項目的第一個發行版的設計可能會對以后應用到該更新的更新的成功產生重大影響。本文提示用于組織您的初始MSI安裝項目,并在適當情況下描述了激發這些提示的適用Windows Installer行為或最佳實踐準則。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
InstallShield是構建Windows安裝程序和MSIX包并直接在Microsoft Visual Studio中創建安裝的最快速最簡單的方法。借助InstallShield,您可以快速適應行業的變化,更快地進入市場并提供引人入勝的客戶體驗。
MSI原始安裝項目的第一個發行版的設計可能會對以后應用到該更新的更新的成功產生重大影響。以下提示用于組織您的初始MSI安裝項目,并在適當情況下描述了激發這些提示的適用Windows Installer行為或最佳實踐準則。
注意:這些技巧主要適用于次要升級。通常,主要升級的先卸載后再安裝性質使它們較不容易受到與安裝項目的組織有關的問題的影響。
提示1、盡可能使用版本密鑰文件
Windows Installer對系統穩定性的部分貢獻是嚴格的文件版本轉換規則。但是,在決定是在重新安裝還是在更新安裝過程中安裝組件時,MSI通常僅對組件的密鑰文件執行版本比較。確保組件將在您的新產品版本中更新的一種簡單方法——為您的密鑰文件提供比目標系統上相應文件更高的版本。
此技巧與MSI最佳實踐規則有關,該規則是將最多一個可移植的可執行文件(EXE,DLL,OCX等)放入組件中,并將該文件標記為其組件的密鑰文件。除了為您的安裝提供最有效的修復模式外,如果在新產品版本中僅更新了一些文件,則擁有更多組件會導致更理想的默認行為。
提示2、將您的產品劃分為離散的功能集
功能的主要用途是為用戶提供產品功能的可選部分。 安裝程序設計的早期部分是定義希望用戶能夠看到和配置的功能(和子功能等)。
大多數安裝程序提供自定義安裝類型,該安裝類型會向用戶顯示類似于以下內容的面板,用戶可以在其中選擇要安裝的產品功能。
安裝程序的此最終用戶視圖是您需要配置的其他功能的基礎。
沒有將應用程序劃分為功能的固定規則列表。在某些情況下,應用程序的體系結構將建議劃分功能(程序文件,幫助文件,工具,示例等)。在其他情況下,有必要在應用程序中定義人為邊界,以創建可管理大小的功能。
將產品劃分為用戶可選擇的功能后,可以將這些功能進一步劃分為子功能。對于這些子功能中的每一個,可以將顯示屬性設置為不可見,將遠程安裝屬性設置為收藏夾父級,并將必需屬性設置為是。在這種情況下,用戶將僅看到可見的功能并與之交互,但是安裝的行為就像子功能中的所有應用程序資源都是主要功能的一部分一樣。
注意:將子功能標記為僅在安裝了其父功能時才安裝該子功能。
項目具有的功能越多,重新安裝行為的靈活性就越大。REINSTALL屬性應在次要升級安裝期間設置,它接受要重新安裝的功能的列表。在進行次要升級(尤其是作為補丁程序)時,不應使用設置REINSTALL = ALL,而應明確指定要重新安裝的功能。
上圖是一個相關的常見實踐,即創建頂級的產品功能。
提示3、將用戶可配置的注冊表數據置于其自身的功能中
應用較小的升級時,還將重新安裝所有正在重新安裝的功能中的所有注冊表數據。即使沒有更新包含注冊表數據的組件,也會發生這種情況。
這意味著任何已從其原始值修改的注冊表設置都將恢復為其默認值。在某些情況下,這是可以接受的行為,但是通常您不希望將用戶的配置設置替換為原始出廠設置。
如果您將用戶可配置的注冊表數據放置在它自己的功能中(如上一個技巧所述),則除非在更新過程中設置的REINSTALL屬性的值中列出了該功能,否則不會重新安裝該功能。
如果不想重新安裝任何注冊表數據,還可以從REINSTALLMODE值中省略m和u標志。但是,此設置適用于整個安裝,并且在應用修補程序期間可能會產生不良影響。
提示4、初始安裝期間不會自動保存MSI屬性值
除少數例外,在維護模式或更新方案期間,初始安裝期間設置的MSI屬性值將不可用。如果您認為需要一個屬性值供以后的維護或更新安裝使用,一種常見的做法是在初始安裝過程中將該屬性的值寫入注冊表,并在以后的安裝過程中讀回數據。
要將屬性的值寫入注冊表,您可以利用以下事實:注冊表的值字段使用已格式化的MSI數據類型。使用Formatted數據類型的MSI數據庫字段將在運行時將[PropertyName]形式的表達式擴展為指定屬性的值。例如,要將運行安裝的用戶的帳戶名寫入注冊表,可以創建一個帶有數據[LogonUser]的值。
要在以后的安裝過程中回讀注冊表數據,可以填充AppSearch和RegLocator表,或者使用InstallShield System搜索向導為您填充表。當然,您可以改為創建自定義操作腳本或DLL來為您讀取注冊表數據。(您可以將條件未安裝附加到您要僅針對首次安裝運行的操作上,并將條件已安裝用于僅應在維護操作期間運行的操作)
前面提到的例外是MSI屬性USERNAME,COMPANYNAME和ProductID的值,這些值可以通過MsiGetUserInfo API函數使用。以及MsiGetProductInfo API函數提供的ProductVersion和大多數添加或刪除程序設置的值。
通常的要求是保存主產品安裝目錄的值,該目錄通常存儲在INSTALLDIR屬性中,以便在維護或更新操作期間可以使用該值。內置屬性ARPINSTALLLOCATION的值會自動寫入目標系統的注冊表,并且可以使用MsiGetProductInfo函數使用。要將ARPINSTALLLOCATION設置為INSTALLDIR的值,可以使用源ARPINSTALLLOCATION和目標[INSTALLDIR]創建一個屬性設置(Type-51)自定義操作,在標準CostFinalize操作之后按執行順序對其進行調度。如果使用InstallShield創建項目,則會自動包含此類自定義操作。
以上內容對您使用InstallShield是否有幫助?如果您有其他的疑惑或者建議都可以在評論區留言。
推薦文章:
=================================================
如果您想要購買正版授權InstallShield,可以聯系咨詢相關問題。
關注慧聚IT微信公眾號???,了解產品的最新動態及最新資訊。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: