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