您的位置:首页 > 其它

InstallShield自动化

2015-12-11 12:56 477 查看
相信很多朋友遇到过这样的情况,使用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文件,可以从中读取配置。

第一次写文章,也不知道如何上传代码,有需要的可以给我留言,也可以告诉我如何上传代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  改版