1)ISCmdBld.exe的问题:
目前用的是从翠竹心情(http://samblg.spaces.live.com/)处下载的InstallShield2009 Premier SP1版本,但是该版本存在无法使用ISCmdBld.exe从命令行生成安装包的问题。上网搜索,发现此处有一个解决办法:

http://blog.csdn.net/cnStreamlet/archive/2009/04/26/4125834.aspx

即将ISWIBuild.dll文件偏移 0x0002d391处的 75 修改为 EB

2)通过自动化接口调用InstallShield 报错:

通过步骤1后ISCmdBld.exe可以正常使用了,但新的问题又出现了:

我使用vbscript通过自动化接口来完成BuildNumber的自增功能,vbs源码如下

----------------------------------------

Dim strVersion
  Dim arVersion

Set m_ISWiProject = CreateObject("ISWiAuto15.ISWiProject")

strFile = "e:\src\XMIIDP\IS2008\XMIIDP.ism" 
  m_ISWiProject.OpenProject strFile

' Get the current version
  strVersion = m_ISWiProject.ProductVersion

' Split the version into major.minor.build and increment the build number
  arVersion = Split(strVersion, ".")
  nNewBuild = arVersion(2) + 1
  ' Create the new version string and write to project
  strNewVersion = arVersion(0) & "." & arVersion(1) & "." & nNewBuild
'msgbox "a1" 
  m_ISWiProject.ProductVersion = strNewVersion
'msgbox "a2" 
  m_ISWIProject.SaveProject
'  msgbox "a3" 
  m_ISWIProject.CloseProject
msgbox "a4"

-----------------------------------------

在msgbox “a4”之后Installshield出错

wscript.exe和cscript.exe均出现同样的情况。

3)利用AuotoIt的WORKAROUND:
因为我是在一个批处理程序中依次来执行包括vbs在内的一些命令的,不点击这个上图的那个确定就没法往下继续进行,实在是令人讨厌。一开始我采用AutoIt做了个模拟鼠标点击确定按钮的简单脚本,虽然方法丑陋但是确实暂时绕过了这个问题。脚本如下

-----------------------------------------

Dim $errcode
$errcode = 0

While $errcode <> 1
$errcode = WinActivate("WScript.exe - 应用程序错误")
WEnd

Send("{ENTER}")

-----------------------------------------

4)利用AuotoIt的WORKAROUND在WINDOWS 7上失效了:

就这样凑合着过了段时间,最近又需要在家里WIN7系统上执行同样的批处理,结果又发现了新的问题。WIN7系统提示的错误信息不同!实在是不想3)中丑陋的方法了,因此开始研究在自己的程序中调用vbs脚本看能否解决问题。

我的目的很简单:在自己的应用程序中捕获异常,只要不弹出错误提示就行了:)

5)在VC中调用vbs脚本:

我记得在CodeProject上看到过在VC中调用vbs脚本的方法,但是不记得了。只好再次上网搜索,最后采用的是

http://www.codeguru.com/Cpp/misc/misc/article.php/c3907/

上的方案,另外这篇文章也不错以后有机会再尝试

http://www.codeproject.com/KB/COM/scripter.aspx?msg=556234

把codeguru上那篇文章附带的源码修改了修改,开始在VC6中IDE追踪异常的发生位置。按下F5,根据IDE信息判断异常是退出程序时发生在ISUIServices_libFNP.dll模块中的,上网一搜该模块是属于Flexnet组件的,似乎目前还没有比较好的解决办法。因为我只要不弹出错误提示就可以了,因此尝试采用在try…catch(…)结构中手动卸载该DLL。

采用以下修改自MSDN实例程序的FindDllByName可以得到该DLL的句柄,传给FreeLibrary即可实现手动卸载该DLL

-----------------------------------------

#include <tlhelp32.h>

static BOOL FindDllByName (DWORD dwPID, LPCTSTR pszDllName, HMODULE& hm)
{
    BOOL          bRet        = FALSE;
    BOOL          bFound      = FALSE;
    HANDLE        hModuleSnap = NULL;
    MODULEENTRY32 me32        = {0};
    // Take a snapshot of all modules in the specified process.
    hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
    if (hModuleSnap == INVALID_HANDLE_VALUE)
        return (FALSE);
    // Fill the size of the structure before using it.
    me32.dwSize = sizeof(MODULEENTRY32);
    // Walk the module list of the process, and find the module of
    // interest. Then copy the information to the buffer pointed
    // to by lpMe32 so that it can be returned to the caller.
    if (Module32First(hModuleSnap, &me32))
    {
        do
        {
            if (stricmp(me32.szModule,pszDllName)==0)
            {
                hm = me32.hModule;
                bFound = TRUE;
            }
        }
        while (!bFound && Module32Next(hModuleSnap, &me32));
        bRet = bFound;   // if this sets bRet to FALSE, dwModuleID
        // no longer exists in specified process
    }
    else
        bRet = FALSE;           // could not walk module list
    // Do not forget to clean up the snapshot object.
    CloseHandle (hModuleSnap);
    return (bRet);
}

-----------------------------------------

6)结果:

呵呵,编程卸载DLL后XP系统上果然不弹出出错提示了:)

我把codeguru上文章中程序修改后命名为ISAutomationRunner.exe,再调用vbs时只要输入

ISAutomationRunner.exe XXX.vbs即可

点击下载ISAutomationRunner.exe

点击下载ISAutomationRunner源码

7)2010-04-23 更新:
ISAutomationRunner.exe中所采用的方法在win7平台下没有效果。解决方法有待寻找。

转载于:https://www.cnblogs.com/silentmj/archive/2010/04/21/1717506.html

通过自动化接口调用InstallShield 报错的解决办法相关推荐

  1. GitLabCICD实战----在.gitlab-ci.yml文件的步骤中使用git clone 另一个代码仓报错的解决办法

    更多信息请关注 个人网站 一.背景 在有些时候,比如在一个项目中,产品的代码是java代码仓,自动化测试脚本是python语言,单独存放的代码仓,在使用GitlabCICD构建流水线的时候有这样一种场 ...

  2. 谷歌正常,IE报错400 解决办法

    在请求接口的时候,使用的是get方法,如果路径上的参数有中文的时候,这时候在IE浏览器打开就会报错400. 解决办法是:或是改用post方式: 或是 用 encodeURI 进行转码即可: 例如以下的 ...

  3. windows10下,from skimage import morphology 报错的解决办法

    windows10下,from skimage import morphology 报错的解决办法 报错原因 没有安装numpy+mkl库 解决方法 卸载skimage pip uninstall s ...

  4. Xamarin开发安装Visual Studio 2015 update2报错的解决办法

    Xamarin开发安装Visual Studio 2015 update2报错的解决办法 错误信息:update 2 requires a member of the visual studio 20 ...

  5. source insight删除保存路径为中文的project工程项目报错的解决办法

    http://blog.csdn.net/yixilee/archive/2010/09/01/5855663.aspx source insight删除已加载的project工程项目报错的解决办法 ...

  6. 图解Myeclipse 导入Java Web项目报错的解决办法听语音

    图解Myeclipse 导入Java Web项目报错的解决办法听语音 https://jingyan.baidu.com/article/046a7b3e953ef3f9c27fa93d.html

  7. 12 c for. oracle rac,【案例】Oracle RAC FOR AIX搭建执行root.sh时两次报错的解决办法

    天萃荷净 运维DBA反映在aix 5.3 ml6安装10.2.0.1 rac报错0509-036 Cannot load program crsctl.bin because of the follo ...

  8. ibatis mysql 同时删多个表报错_MySQL中Multiple primary key defined报错的解决办法

    MySQL中Multiple primary key defined报错的解决办法 创建主键可以有两种方式: create table 表名( 字段名 类型, 字段名 类型, -- primary k ...

  9. SQLSERVER 创建ODBC 报错的解决办法 SQLState:‘01000‘的解决方案

    SQLSERVER 创建ODBC 报错的解决办法 SQLState:'01000'的解决方案 参考文章: (1)SQLSERVER 创建ODBC 报错的解决办法 SQLState:'01000'的解决 ...

  10. 安装mysql驱动报错_java.sql.SQLException: org.gjt.mm.mysql.Driver 报错【解决办法】

    今天爱分享给大家带来java.sql.SQLException: org.gjt.mm.mysql.Driver 报错[解决办法],希望能够帮助到大家. spring boot mysql 中启动报错 ...

最新文章

  1. Objetive-C枚举位移操作Swift枚举位移操作
  2. java解析消息头代码_javaWeb项目-文件下载的消息头和编码问题
  3. charles 代理手机连不上网_「技巧」不想接电话?这样可以让手机变成空号,还不影响上网...
  4. 证书服务器web注册,无法通过 Web 注册请求证书 - Windows Server | Microsoft Docs
  5. ExtJS--Combobox多选相关(1)
  6. 机器学习/深度学习测试题(一) —— 单层感知器的激活函数
  7. 文档协作编辑 ONLYOFFICE 部署和使用教程
  8. unity打开摄像头
  9. eNSP模拟器中 FTP 实验
  10. STM32压力传感器信号采集-24位AD HX720 HX711 原理介绍
  11. 关于驻波比(VSWR)的详细解析
  12. 安装shipyard
  13. Celus 使用 AI 实现电路板设计的自动化
  14. HCIE - 2204-MPLS
  15. 开视界 创未来丨酷雷曼第十期合作商交流会圆满举办
  16. android修改图片(修改图片大小,图片旋转,图片平移)
  17. 2023年开网店还能赚钱吗?去哪里找货源?
  18. vue element-ui 实现可输入的选择下拉框
  19. 跟我学c++初级篇——别名的使用
  20. 破解SQLYog30天试用方法

热门文章

  1. Uber开源深度学习工具Ludwig学习实践
  2. Python简单的小实验输出对应车站的中文简写(主要是为了解决汉字编码问题)
  3. 使用visio画数据库模型图
  4. Linux网络编程和套接字
  5. linux 贡献内存,Microsoft为Linux 5.12贡献完整性子系统更新
  6. FISCO BCOS log日志设置配置
  7. 【Django 2021年最新版教程30】django项目部署到华为云(nginx uWSGI mysql方式)
  8. Ubuntu IPFS小白安装入门教程
  9. ubuntu 时间戳不对
  10. 关于Stringbuffer的需要注意的几点