installShield的一个问题,访问外部dll的两个问题,msiexec被病毒修改的问题

[installShield X Express ]

问题描述:

简单的进行了一个安装文件的制作后,build的时候总是出现

ID_STRING1没有赋值,但是不能为nullable

的error提示,虽然能形成安装文件,但是该文件执行时并不正常.

解决过程:

project->export string Table 生成了一个文本文件,查看后发现ID_STRING1没有值,但是并不知道ID_STRING1在is中哪里设置,我人为的在该文件之后添加值,使用project->import string table后,在界面中查看没有看到我刚添加的值.

我在general information页中每个空白处填入了不同的值,然后再次export,发现文件中ID_STRING1已被赋值,通过对比,得知ID_STRING1是publisher/product url,将其赋值后,问题消失.但在什么地方能查明ID_STRING1对应的是什么值呢,这个问题并没有得到答案,期间我在is的帮助及站点上也查过,都没有得到答案.

[调用外部dll的问题]

问题描述:

形如function(const param1:integer;const param2:pSomeStruct)的dll函数(第2个参数为结构体指针)调用时函数执行正常,但是param1在调用完成后,值被修改为0,如果将该参数改为var,则值未更改,但函数得到的结果并不正确.

解决过程:

在sdk中,发现pSomeStruct的成员为6个,而在官方的C++示例程序中,缺只有5个,其中一个由

#ifdef macintosh来控制,于是添加该成员,问题消失,究其原因,C++的代码定义了该变量,但翻译pas单元时,想当然的将该成员去掉,造成该结构体长度变化,而在调用函数,dll将param1地址当做结构体部分的地址,进行了修改,造成const参数调用完成后值被改变.

[调用外部dll的问题2]

问题描述:

一个dll函数,形如funtion(aFunc:TMyFunc),其中一个参数为回调函数,需要传入函数指针,定义该函数

function MyFunc;

后,传入,被dll调用该函数时,在函数体内发生错误.

解决过程:

加上stdcall;调用惯例,问题消失,即使要传给dll的回调函数也应该加入stdcall.结论就是如果要和dll打交道,只要是函数,都应加上stdcall,

[msiexec被病毒修改的问题]

问题描述:

新装系统后,安装msi类型程序时,出现

该服务已停止

的错误

解决过程:

查看(服务)中的windows installer 服务,发现其可执行文件根本不存在.于是人工建立该目录,拷贝msiexec.exe过去,执行安装,仍然报错,

google搜索到该文章http://iask.sina.com.cn/q/98/91/51/519198.shtml

按照其中的win2000部分,问题解决.摘抄如下

 

 

windows installer服务解决方案
很多朋友在安装MSI格式的文件包时,经常会遇到windows installer出错的情况,有如下几种现象:

 

1、所有使用windows installer服务安装的MSI格式程序均不能正常安装,并且系统提示“不能访问windows installer 服务,可能你在安全模式下运行 windows ,或者windows installer 没有正确的安装,请和你的支持人员联系以获得帮助”。
2、察看“windows installer服务”的状态,一般为停用,当你试图启用此服务,会发现此服务已被系统禁用,或则windows installer服务已被标记为删除。
3、如果你重新安装windows installer服务,系统提示“指定的服务已存在”。

当出现了以上现象,是非常令人头疼的,而且问题难以解决,后来经自己研究发现一些非常好的解决方法。

笔者以Windows2000和Windows XP系统为例,根据它们出现的不同问题分别介绍一下解决过程:

一、Windows2000解决过程:

在Windows2000系统中3种现象都是经常出现的。

第一步:点击”开始-->运行“,输入”CMD“命令,在弹出的”CMD命令提示符“窗口中输入”msiexec /unregserver“命令,这样就停掉windows installer服务。

第二步:下载windows installer服务安装程序包,Windows2000/NT系统的安装程序包为”InstMsiW.exe“,Windows98/ME安装程序包为"InstMsiA.exe",Windows XP系统则集成了最新版本的Windows Installer v2.0。

下载”InstMsiW.exe“安装程序包后,将其用winrar解压开,然后进入到此目录中。

第三步:右键单击”msi.inf“文件,点击”安装“选项,接着右键单击” mspatcha.inf “文件,点击”安装“。

第四步:在CMD命令提示符下输入”msiexec /regserver“命令,这样就启动了windows installer服务,重新启动Windows2000系统后,问题就得到解决。

注意:在安装两个inf文件的过程中,不要重新启动系统,全部操作完成后才能重启,另外,如果系统安装了”瑞星病毒防火墙”和“瑞星网络防火墙”,建议在操作过程中关闭瑞星防火墙。

二、Windows XP解决过程:

Windows XP集成了最新版本的Windows Installer v2.0,但在Windows XP里安装MSI程序也会经常出现”找不到windows installer服务”“的错误。

第一步:使用记事本编写installer.reg文件,内容如下:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/MSIServer]

"ImagePath"=-

"ImagePath"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,/

74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,6d,/

00,73,00,69,00,65,00,78,00,65,00,63,00,2e,00,65,00,78,00,65,00,20,00,2f,00,/

56,00,00,00

然后将文件保存为”.reg“格式,双击该文件,将文件内容导入注册表。

第二步:重新启动电脑进入安全模式(启动时按F8键),然后点击”开始-->运行“,输入”CMD“命令,在弹出的”CMD命令提示符“窗口中输入”msiexec /regserver“,最后重新启动系统即可。

 

 

发表于 2005年05月15日 7:49 PM
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值