本文主要是针对艾泽拉斯之海洋女神出品(四) --高级设置二 中的【完美卸载】,做出自己的看法,不针对任何人。
程序即将发布,但面临打包问题。花了两天时间,在网上找资料及学习InstallShield。主要学习资料来源于海洋女神博客。最终将InstallShield 12 Premier 搭建好。马上动手实践,期待见证时刻。
亲身下河知深浅!因为有做程序的功底,再结合网上的资料,前段进展很是乐观。但是,快要结束时困难来了。卸载程序!卸载快捷方式!
看了海洋女神的博客---完美卸载 一节,自己动手实践。卸载程度时还是不行!以为是代码错误,继续检查,编译,DEBUG....还是不行!关键问题在于:
AddFolderIcon ( szProgramFolder, szItemName, szCommandLine, szWorkingDir, szIconPath, nIcon, szShortCutKey, nFlag );
此函数中的 szCommandLine参数!
出自海洋女神博客代码:
function OnFirstUIAfter()
STRING szfilename,szFolder ,szmsg1,szmsg2;
NUMBER nresult;
begin
//创建删除快捷方式
szfilename = UNINSTALL_STRING +" /UNINSTALL";
nresult = StrFind(szfilename,".exe");
if nresult >=0 then
StrSub(szmsg1,szfilename,0,nresult + 4);
StrSub(szmsg2,szfilename,nresult + 4,200);
LongPathToQuote(szmsg1, FALSE );
LongPathToQuote(szmsg2, FALSE );
szfilename = "/"" + szmsg1 + "/"" +szmsg2;
endif;
AddFolderIcon(FOLDER_PROGRAMS^"Test","Uninstall",szfilename,WINDIR,"",0,"",REPLACE);
End;
我们来看给AddFolderIcon函数中的szCommandLine参数,所传的值为:szfilename,而szfilename = UNINSTALL_STRING +" /UNINSTALL";
经过查找帮助文档中对UNINSTALL_STRING的解释,这样赋值没问题;但后来联想到命令行语句,随手就查了在InstalShield中的Setup.exe命令行的解释说明,卸载参数为:/uninst。所以就想到既然UNINSTALL_STRING有预定义,那么卸载程序命令也应该有预定义,要不然InstallSheild默认自带的卸载是如何执行的;所以就在帮助文档中,查找:UNINST开头的,想不到真有。于是调试程序,取出UNINST的值与szfilename = UNINSTALL_STRING +" /UNINSTALL";对比之,顿时拨云见日。原来szfilename = UNINSTALL_STRING +" /UNINSTALL"; 赋值时出现问题。问题找到,解决不用2分钟。
经过在Win7 + InstallShield 12 调试的代码应该为:
szFileName = UNINSTALL_STRING + " -UNINSTALL";
nResult = StrFind(szFileName,".exe");
if nResult >= 0 then
StrSub(szMsg1, szFileName, 0, nResult + 4);
StrSub(szMsg2, szFileName, nResult + 4,200);
LongPathToQuote(szMsg1, FALSE);
LongPathToQuote(szMsg2, FALSE);
szFileName = "\"" + szMsg1 + "\"" + szMsg2;
endif;
AddFolderIcon(FOLDER_PROGRAMS^"Test","Uninstall",szfilename,WINDIR,"",0,"",REPLACE);
在此感谢海洋女神,感谢CSDN......