InstallShield安装包卸载-完美卸载

在前面的日志里面介绍了在卸载的时候删除整个安装目录的方式。但是当遇到程序生成的文件不是在同一个目录下,有时甚至是用户自定义的文件夹路径,这个时候我们卸载的时候是没有将用户自定义的文件夹给删除掉的。所以今天会介绍怎么用getprofstring函数获取一个ini配置的值并且用DeleteDir函数将其删除

程序在安装的时候会要求用户创建一个目录如:d:hiadmin

hiadmin下面有如下子文件夹
d:hiadmindiskserver            主程序文件

d:hiadminxml                     使用过程产生的文件放这里(这个文件夹用户是可以自定义的)

d:hiadminserver                管理程序

现在我需要在程序卸载的是将这3个文件夹都删除掉

在前面的日志里面我用DeleteDir将安装目录下的hiadmin都删除掉了(代码如下)

DeleteDir (TARGETDIR^”hiadmin”,ALLCONTENTS);

但是现在的问题是用户在安装的时候自定义了XML的文件夹路径,这个我在卸载的时候就会出现用户自定义的XML文件夹没能删除,导致用户在下一次安装的时候如果还是将XML文件夹自定要上一次的地方就会出现问题

为了规避这个问题,程序在卸载的时候就必须要将diskserver ,xml ,server 这个3个都完全删除掉

解决方法如下:

1.用户自定义的XML路径是写在diskserver配置文件里面

首选获取到配置文件里面xml的绝对路径

2.用DeleteDir函数删除即可

首选我们得获取到配置文件里面的值InstallShield为我们提供了GetProfString函数

GetProfString ( szFileName, szSectionName, szKeyName, svResult );

GetProfString函数从一个指定的.ini文件中检索一个配置字符串

参数:
szFileName
指定一个.ini文件名,从中得到一个键的当前值。
szSectionName
指定.ini文件中的一个段名,从中查找szKeyName。段名必须不被包围在定界中括号中([ ])区分大小写。
szKeyName
指定一个键,它的值被返回到svResult。查找该键时不区分大小写。为得到一个段中所有键名的列表,给该参数传递一个空字符串。更多信息请看下面的注解。
svResult
如果 szSectionName指定一个段名,szKeyName指定一个键名,该键的值被返回到该参数。

function OnUninstalledFile(szFile)
string svResult; //定义svResult
begin
ServiceStopService(“hiadmin”);

//卸载的时候先停止hiadmin服务
GetProfString ( TARGETDIR^”\hiadmin\diskserver\config.ini”, “Config”, “DataFilePath”, svResult);

//用GetProfString获取安装目录下diskserver下面config.ini配置文件,Config字段,DataFilePath的值并赋值给svResult
DeleteDir (svResult,ALLCONTENTS);
//删除svResult(svResult的值在上面已经得到)
DeleteDir (TARGETDIR^”hiadmin”,ALLCONTENTS);
//删除TARGETDIR(安装目录下)的整个hiadmin文件夹
end;

到此就完全的彻底的解决了卸载的时候会留下程序安装时生成的文件。

这次主要介绍了GetProfString函数的用法。

也是对上一篇日志《InstallShield安装包卸载不干净的解决办法》的补充!

《InstallShield安装包卸载-完美卸载》有0个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注