如何在Windows Installer的Custom Action中Sleep

项目终于接近尾声,马上就要打包发布了。所以最近在研究Wix 3.5。Wix是一个Free的全脚本打包工具,是和MSI的每个指令一一对应的,所以比较原始,如果你不想很深入的研究MSI,那么你就去用Installer Sheild,这个工具够傻瓜,并且把MSI里面的细节都封装好了,只需按照向导就可以完成打包。

如果你感觉Installer Sheild还是复杂,那就用VS自带的打包工程,这个就更傻瓜了。

如果你想免费,又想精确控制每个安装步骤,并且想在安装完毕后执行些脚本,那么选择WIX 准没错。

我们的产品就是如此,安装比较复杂,并且安装完毕后还要执行一些VBS,所以我们选择了Wix

安装完Wix Visual Studio插件以后,就可以在Windows里面直接编译Wix项目了,其实Wix项目文件就是一个xml文件,说的编译,其实就是针对这个xml文件分析,然后生成MSI文件。

这里就不深入介绍如何编写这个WIX的XML文件啦,我想在这里介绍一个小发现,我先描述一下项目的需求:

1,安装

2,安装完毕后,执行一个脚本,

3,如果是XP系统,需要在脚本内Sleep 3000,然后继续执行

结果发现WIX不支持Sleep,具体的说是因为Custom Action不支持,所以无法Sleep。

在国内外找了一个小时,大家都在抱怨这个问题,但是没什么好的解决方案,其中一个workround是再写一个VBS,然后在Custom Action里面用Wshell.run "sleep.vbs",0, true,来调用。

但是要为此多增加一个vbs到安装包中,感觉很不爽,那有没有更好的方法呢,于是就想有没有Wshell.run "cmd /c xxx", 0, true之类的指令呢?

无意中发现可以通过Ping来解决,其实原理就是ping自己,每次ping的时间间隔大概是1秒所有,加入

 

WshShell.Run "cmd /c ping -n 3 -w 1000 127.0.0.1 >NUL", 0, True

 

打包,运行,没问题!

在看一下ping的参数,-n 3代表的是ping 3次, -w 1000代表是每次ping 的timeout时间, 这样就能让安装程序在这里停上3秒

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值