彩票走势图

打包软件InstallShield提示和技巧:安装和卸载的条件

翻译|使用教程|编辑:况鱼杰|2019-11-21 11:09:38.910|阅读 1330 次

概述:使用InstallShield创建的基本MSI项目是数据库驱动的,而不是脚本驱动的。MSI数据库的一个功能是有序列表,这些序列表定义了要执行和显示的动作以及对话框的顺序。 本文介绍了如何定义Windows Installer条件使您能够指定仅在首次安装,完全卸载或仅在安装特定功能时才执行操作。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:

    InstallShield是构建Windows安装程序和MSIX包并直接在Microsoft Visual Studio中创建安装的最快速最简单的方法。借助InstallShield,您可以快速适应行业的变化,更快地进入市场并提供引人入胜的客户体验。      

点击下载InstallShield最新试用版  


    使用InstallShield创建的基本MSI项目是数据库驱动的,而不是脚本驱动的。MSI数据库的一个功能是有序列表,这些序列表定义了要执行和显示的动作以及对话框的顺序。

    本文介绍了如何定义Windows Installer条件使您能够指定仅在首次安装,完全卸载或仅在安装特定功能时才执行操作。

安装与卸载

    基本MSI设置不使用显式脚本,而是使用序列表来确定要执行的操作以及它们发生的顺序。特别是,InstallUISequence和InstallExecuteSequence表(用户界面和执行序列)包含在常规安装期间要执行的操作的有序列表。(也就是说,通过双击MSI数据库图标或通过运行命令msiexec / i ProductName.msi开始安装)

    当使用MSI序列表时,一个重要的想法是,相同的序列用于首次安装和维护安装(包括卸载)。 没有单独的卸载顺序。因此,默认情况下,您在安装序列中计划的所有自定义操作都将同时运行以进行安装和卸载。当然,问题在于这种行为对于许多自定义操作是不被期望的,尤其是那些涉及启动或操作由安装程序安装的文件的操作。

    为确保操作仅针对首次安装运行,您可以使用条件Not Installed。(请记住,属性名称区分大小写。常见的错误是将属性名称的大小写误认为是Not INSTALLED;因为大写属性INSTALLED通常是未定义的,因此条件Not Installed才会成功。)条件未安装适用于例如启动自述文件或正在安装的应用程序的自定义操作。

    如果已经安装了当前产品(当前安装是按用户安装的按机器安装的),则将设置Installed属性。(请注意,Windows Installer还定义了一个ProductState属性,该属性还使您能够检测是否为其他用户安装了当前产品。)如果您有应针对任何维护操作运行的自定义操作(修改,修复或删除,但不是首次安装),则可以使用Installed条件。

    要检测完全卸载,可以在某种情况下使用REMOVE属性。REMOVE属性设置为要删除的功能的逗号分隔列表。在完全卸载期间,将REMOVE设置为特殊字符串值ALL,因此可以使用条件REMOVE ="ALL"来检测完全卸载。(请注意,此条件仅在InstallExecuteSequence表中的InstallValidate操作之后才有效。)

    用于检测用户界面序列中的完全卸载的另一个选项是使用_IsMaintenance属性。标准MaintenanceType对话框提供了Modify,Repair和Remove单选按钮。用户的单选按钮选择存储在_IsMaintenance属性中,值为更改,重新安装或删除之一。 然后,在用户界面序列中,可以在维护类型对话框之后的任何位置为操作指定条件_IsMaintenance =“Remove”。 (由于_IsMaintenance是一个私有属性-它的名称包含小写字母-当执行从用户界面序列切换到Execute序列时,它将重置其值,因此不能在Execute序列中使用它来检测安装类型。) 

总结

    可以使用以下条件来检测不同的安装模式:

  • 首次安装:Not Installed

  • 任何维护类型:Installed

  • 卸载:REMOVE =“ ALL”(在InstallValidate之后)

功能和组件条件

    除了检测整个产品的不同安装类型之外,有时还可以检测是否正在安装或删除特定功能部件或组件。为此,Windows Installer在使用Condition数据类型的MSI数据库字段中提供了特殊的语法,例如任何序列表中记录的Condition字段。

    特征条件的最常用类型是特征动作类型,其中表达式&FeatureName设置为一个数值,该数值指示要对称为FeatureName的特征执行的操作。&FeatureName的可能值如下(在CostFinalize操作之后有效):

-1

无动作(功能不变)

1

广告功能

2

未安装功能(已卸载)

3

本地安装的功能

4已安装功能以从源代码运行

例如:

    要检测是否已选择名为FeatureA的功能在本地安装,或者尚未在本地安装,则可以使用条件&FeatureA = 3。您可以在序列表中的操作上使用此条件,也可以在(例如)CustomSetup或SetupType对话框的下一步按钮上的NewDialog控件事件上使用此条件。

    使用功能操作条件,您可以确定功能的安装状态是否正在更改(在上面的示例中,从未安装更改为本地安装)。如果要确定功能部件的状态,则无论该功能部件的状态是否正在更改,都可以使用功能部件状态条件。功能状态条件使用!FeatureName = n形式,其中n是上表中的值之一。

    同样,Windows Installer定义了组件操作和组件状态条件语法,分别为$ ComponentName = n?ComponentName = n,其中n也是上表中的值之一。

其他注意事项

    使用安装和卸载时,还有一些其他注意事项:

  • 如果用户执行无提示或受限UI安装,则Windows Installer仅执行执行序列中的操作。因此,无论附加在用户界面上的任何条件如何,都将跳过在用户界面序列中进行的任何操作。

  • 与前一个注释相关,如果用户通过单击添加/删除程序面板上的删除按钮来启动卸载(在Windows 2000或更高版本中),则仅执行执行序列中的操作。

  • 在首次安装过程中启动文档或可执行文件的自定义操作有时会按执行顺序进行计划; 但是,文档或可执行文件的用户界面通常不适用于静默安装。为确保操作仅在完整UI安装期间运行,您可以使用UILevel属性将本文中描述的条件与条件结合使用。对于完整UI安装,UILevel属性设置为5(对于静默,基本UI和精简UI安装,其数值较低),因此可以使用诸如(未安装)和(UILevel = 5)的条件。)以检测使用完整用户界面运行的首次安装。

推荐文章:

MSI功能和组件的使用

从自定义操作写入日志文件PDF文档


如果您想要购买正版授权InstallShield,可以联系咨询相关问题。

关注慧聚IT微信公众号☟☟☟,了解产品的最新动态及最新资讯。

1561953111.jpg



标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@capbkgr.cn

文章转载自:

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP