使用WiX制作具有时间限制的安装包

简介: WiX是Windows Installer XML的简称,它是用于制作Windows安装包的工具集。它支持命令行环境,开发者可以及将它集成到他们的编译过程中创建MSI和MSM安装包。 更多信息可以参考:http://wix.sourceforge.net/   最近研究了一下如何使用WiX制作具有时间限制的安装包,下图是demo的效果图。

WiX是Windows Installer XML的简称,它是用于制作Windows安装包的工具集。它支持命令行环境,开发者可以及将它集成到他们的编译过程中创建MSI和MSM安装包。

更多信息可以参考:http://wix.sourceforge.net/

 

最近研究了一下如何使用WiX制作具有时间限制的安装包,下图是demo的效果图。

clip_image002

完成这个demo主要有两点值得注意:

1. 选择合适的脚本语言(VBScript or JScript)实现定制操作。

2. 选择合适的实际执行上面的脚本。

 

下面分享我的实现过程:

1. 实现一段检查当前时间是否越界的脚本代码,并将它封装到CustomAction中。

    使用VBScript比较当前日期和限定日期,小于0表示越界,这时调用WScript想注册表添加坏键。

    <CustomAction Id="ValidateTimeLimitCA" Script="vbscript" Execute="immediate" >
      <![CDATA[
      If DateDiff("d", Date, #2011/07/31#) < 0 Then
        Set WShell = CreateObject("WScript.Shell")
        WShell.RegWrite "HKCU\Software\GrapeCity\TimeLimit\DateDiff", 1, "REG_DWORD"
        Set WShell = Nothing
      End If
   ]]>
    </CustomAction>

2. 选择合适的时机执行上述脚本,越早越好。

    在本文的demo中,我在PrepareDlg之前执行脚本,对于大多数情况而言,这已经是最早的时机了。当然,你也可以选择在AppSearch之前执行。

    <InstallUISequence>
      <Custom Action="ValidateTimeLimitCA" Before="PrepareDlg" />
    </InstallUISequence>

3. 添加一个RegistrySearch属性,用于第一步提到的坏键。

    <Property Id="TIMELIMIT">
      <RegistrySearch Id="TIMELIMIT_VALUE" Root="HKCU" Key="Software\GrapeCity\TimeLimit" Name="DateDiff" Type="raw" />
    </Property>

4. 添加Condition用于检查第三步添加的属性是否存在,并在需要的时候弹出错误信息。

    <Condition Message="This is package is out of date at July 31, 2011">
      Installed OR NOT TIMELIMIT
    </Condition>

 

5. 实现一个清除操作,用于清除第一步添加的坏键。

    <CustomAction Id="CleanupTimeLimitCA" Script="vbscript" Execute="immediate" >
      <![CDATA[
      Set WShell = CreateObject("WScript.Shell")
      WShell.RegDelete "HKCU\Software\GrapeCity\TimeLimit\"
      Set WShell = Nothing
   ]]>
    </CustomAction>

 

6. 在FatalError对话框中发布Finish事件,同时将值设置给第五步提到的清除操作。

    <UI>
      <UIRef Id="WixUI_Minimal" />
      <Publish Dialog="FatalError" Control="Finish" Event="DoAction" Value="CleanupTimeLimitCA">1</Publish>
    </UI>

 

到这里就完成,代码很简单,希望有价值。

 

源码下载地址如下:

TimeLimit.rar

相关文章
|
5月前
|
设计模式 存储 Java
【设计模式】【行为型模式】备忘录模式(Memento)
一、入门 什么是备忘录模式? 备忘录模式(Memento Pattern)是一种行为设计模式,用于在不破坏封装性的前提下,捕获并外部化一个对象的内部状态,以便在需要时恢复该状态。它通常用于实现撤销操作
166 8
|
数据安全/隐私保护 iOS开发 MacOS
Homebrew 安装使用
【10月更文挑战第5天】Homebrew 是一款用于 MacOS 系统的软件包管理工具,能够便捷地安装、卸载及更新各类软件与工具。通过终端执行简单命令即可完成安装,并利用 `brew` 命令进行软件搜索、安装、更新和卸载等操作,极大提升了用户管理软件的效率。安装前需确认已安装 Xcode Command Line Tools。
1022 6
|
存储 Kubernetes 容器
Kubernetes 存储选项:持久化卷与存储类
【8月更文第29天】随着容器化的普及,越来越多的应用程序需要持久化数据以保持状态信息。Kubernetes 提供了一套完整的解决方案来管理和配置持久化存储,包括持久卷 (Persistent Volume, PV)、持久卷声明 (Persistent Volume Claim, PVC) 和存储类 (StorageClass)。本文将详细介绍这些概念,并通过实际示例来演示如何在 Kubernetes 中配置存储。
850 2
|
7月前
|
人工智能 搜索推荐 API
零门槛、即刻拥有 DeepSeek-R1 满血版
今天来教大家如何用阿里云百炼平台和开源工具 Open WebUI,零门槛(甚至零成本)、即刻拥有 DeepSeek-R1 满血版!全程无需复杂代码,跟着我做就能拥有企业级 AI 服务!我只花了不到半小时就完成了整个服务的部署。
|
12月前
|
Java 测试技术 编译器
🎯Java零基础-Switch条件语句详解 🎯
【10月更文挑战第8天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
213 6
|
传感器 数据采集 监控
QModbus例程分析
QModbus例程分析
|
12月前
|
机器学习/深度学习 开发框架 人工智能
[大语言模型-论文精读] 悉尼大学-ACL2024-提升大型语言模型的复杂视觉推理能力
[大语言模型-论文精读] 悉尼大学-ACL2024-提升大型语言模型的复杂视觉推理能力
229 0
|
Kubernetes 应用服务中间件 nginx
深入了解 `kubectl`:Kubernetes 命令行工具
深入了解 `kubectl`:Kubernetes 命令行工具
343 1
|
传感器
示例四、 开关式霍尔传感器测转速
示例四、 开关式霍尔传感器测转速
594 0
示例四、 开关式霍尔传感器测转速
|
Python
Python中常见的语法错误
【5月更文挑战第13天】Python中常见的语法错误
551 3