[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部分,问题解决.摘抄如下
很多朋友在安装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“,最后重新启动系统即可。