您的位置:首页 > 其它

安装包制作的一点心得

2009-01-22 13:53 204 查看
做安装包同事放假回家了,但最后一天需要修改安装包,需要在安装前先扫描一下进程,删除已经存在的进程

,(不是询问用户,而是偷偷的干掉,没有窗口)。

一年前做过这方面的安装包,现在只好硬着头皮上了。

google了一下,知道windows系统目录下自带一个程序taskkill.exe,于是,很快写下了这个方法:

function KillTestProcess():Boolean;

var

ResultCode : Integer;

begin

Result := Exec(ExpandConstant('{sys}\taskkill.exe'), '/f /im TestProcess.exe', '', SW_HIDE, ewNoWait, ResultCode);

end;

编译,安装。进程被成功杀死。于是发布。

但是,等等,很快发现有人报告安装时找不到dll:FrameDyn.dll。

还是老规拒,google一下。

差FrameDyn.dll的人还真不少,我们不知道用户那里倒底发生了什么事,会没有这一动态库,但做为一个大众软件,我

们的目标就是让用户双击,然后就一直下一步下去,然后成功安装。因为,你每弹出的一个框,都足以让一位用户颤抖

。做为程序员,我们的目标是处理每一个已知错误。

很明显,现在我们眼前有两个解决方法:

1,下载FrameDyn.dll,在安装是判断,用户的系统目录下是否存在FrameDyn.dll,如果不存在,把这个dll复制过去,然

后再利用TaskKill.exe去杀进程,当然,在做这些事前,我建议利用Denpandency工具看一下这个taskkill.exe还有没

有依赖别的动态库。

2,自己定一个SDK程序,干掉这个要删除的进程。我就使用了这一方法。然后重写KillTestProcess函数。

1function KillTestProcess():Boolean;

2var

3 ResultCode : Integer;

4begin

5 Result := false;

6 ExtractTemporaryFile('KillTestProcess.exe');

7 if Exec(ExpandConstant('{tmp}\KillTestProcess.exe'),'','', SW_HIDE, ewWaitUntilTerminated,

8

9ResultCode) then

begin

Result := true;

end;

DeleteFile(ExpandConstant('{tmp}\KillTestProcess.exe'));

end;

问题解决,安心回家过年!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: