InstallShield自动化

相信很多朋友遇到过这样的情况,使用InstallShield打包软件并时常升级,可能需要修改的只是一些版本信息,或其他细微数据项,这应该算是一种体力活啦,如果软件要发行一些OEM版,那就更坑爹了。前段时间,我就碰上了,公司有好几十个OEM版本,而且要定期Release新版本,Relase的时候只需更新文件、修改版本号和其他一些信息,每次手动操作需要半天时间还害怕出错,有没有简单的办法呢,比如写个脚本和搞个小工具来干这些体力活,答案是肯定的。通过查询相关资料了解到,InstallShield提供了自动化功能的接口,并且也Demo,不过都是用VB实现的,下面我介绍一下我用C#是如何实现的:
1 添加ISWiAuto16组件(这个是针对InstallShield10版本的)的引用,如下图:
这里写图片描述

2 在代码中引入命名空间
using ISWiAuto16;
using IsmAutoLib;

3 创建ISWiProjectClass对象并打开ism文件
ISWiProjectClass isProject = new ISWiProjectClass();
int openRes = isProject.OpenProject(fileName, false);

4 修改常规项目,包括ProductVersion、ProductCode等,具体有哪些项目读者可以参考InstallShield官方 的帮助文档,我这里就不一一列举了;

5 修改注册表,我没找到直接修改的方法,我是通过先创建reg文件,然后导入的方法实现的,如果哪位朋友 知道直接修改的方法也请告诉我;
ISWiComponentsClass comC = (ISWiComponentsClass)isProject.ISWiComponents;
ISWiComponentClass icc = (ISWiComponentClass)comC[“ISRegistryComponent”];
if (icc != null)
{
icc.ImportRegFile(regFileName, true);
}

6 修改字符串值
//根据不同的语言ID获取字符串序列
ISWiLanguagesClass lans = (ISWiLanguagesClass)isProject.ISWiLanguages;
ISWiLanguageClass lan2052 = (ISWiLanguageClass)lans[“2052”];//中文简体编号
if (lan2052 != null)
{
ISWiStringEntriesClass values = (ISWiStringEntriesClass)lan2052.ISWiStringEntries;
for (int i = 0; i < values.Count; i++)
{
String colID = “ID_STRING” + i.ToString();//这里无法直接确定STRING的ID,需要遍历一下
ISWiStringEntryClass value = (ISWiStringEntryClass)values[colID];
if (value != null)
{
if (value.Value.IndexOf(proName) != -1)//模糊匹配
{
value.Value = isProject.ProductName;
break;
}
}
}
}

7 修改Release文件名
ISWiProductConfigs configs = (ISWiProductConfigs)isProject.ISWiProductConfigs;
ISWiProductConfig config = (ISWiProductConfig)configs[“Express”];
config.set_SetupFileName(ref setupFileName);

8 Build
ISWiReleasesClass res = (ISWiReleasesClass)config.ISWiReleases;
//打包类型,我们用的是SingleImage
ISWiReleaseClass re = (ISWiReleaseClass)res[“SingleImage”];
if (re != null)
{
re.Build();
}

9 最后保存并关闭文件
isProject.SaveProject();
isProject.CloseProject();

以上核心代码,下面介绍整个工具的实现,先上效果图这里写图片描述
1 UpgradeFile:指定更新文件的bat文件;
2 SetupPath:指定打包文件的根路径;
3 NewVersion:新的版本号;
4 OEMNumber:指定需要升级哪些OEM的软件;
5 Progress:指定都正确后,”Start”就开始自动打包。
另外还配置了一个简单的ini文件,可以从中读取配置。

第一次写文章,也不知道如何上传代码,有需要的可以给我留言,也可以告诉我如何上传代码。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值