InstallShield12的半脚本(InstallScript MSI Project)安装包中,创建反安装(卸载程序)快捷方式
在纯脚本方式(InstallScript Project)安装包中,反安装的快捷方式是没有图形界面可以操作的;而在Basic MSI Project中当然没有问题,但在InstallScript MSI Project安装包中,虽然有图形界面可以操作“Create an uninstallation shortcut”,但经常莫名其妙的会出现删除不干净的问题。有可能是在创建好快捷方式之后又添加了组建,修改了组建名等,反正,有时候出现删除不彻底,非常恼火。后来本人通过不用它的方法创建,而是用下面的函数,实现了彻底删除。该方法会创建程序组菜单下的快捷方式,在控制面板的“添加/删除“功能中也可以找到并启动”修改/删除“。会打开一个界面,允许:修改,修复或者移去程序。
//两个函数的定义,放在program等程序段的最前面。
prototype ExFn_CreateUnInstall(string);//参数是:create:创建,delete:删除
//删除目录和快捷方式
export prototype ExFn_DeleteFolderIcon(string,string);
//两个函数的实现部分:
//创建反安装快捷方式,放任意位置即可
function ExFn_CreateUnInstall(flag)
string szfilename,szFolder ,szmsg1,szmsg2;
number nresult;
begin
if flag = "create" then
// Add uninstall icon
szfilename = UNINSTALL_STRING +" /UNINSTALL";
nresult = StrFind(szfilename,".exe");
if nresult >=0 then
StrSub(szmsg1,szfilename,0,nresult + 4);
StrSub(szmsg2,szfilename,nresult + 4,200);
szfilename = "\"" + szmsg1 + "\"" +szmsg2;
endif;
AddFolderIcon(szFolder,"卸载
"mailto:+@PRODUCT_NAME,szfilename,WINDIR,);
szFolder = FOLDER_PROGRAMS
+"http://www.cnblogs.com/lzh-boy/admin/file:///;
szfilename = TARGETDIR+ "\\存储过程测试http://www.cnblogs.com/lzh-boy/admin/file://test_app.exe/";
AddFolderIcon(szFolder,"启动 "+@PRODUCT_NAME,szfilename,TARGETDIR+
"\\存储过程测试","",0,"",REPLACE);
//打开目录
ShowProgramFolder (szFolder, SW_SHOW);
Delay (3);
else
//删除快捷方式
szFolder = FOLDER_PROGRAMS
+"http://www.cnblogs.com/lzh-boy/admin/file:///;
szfilename = UNINSTALL_STRING +" /UNINSTALL";
nresult = StrFind(szfilename,".exe");
if nresult >=0 then
StrSub(szmsg1,szfilename,0,nresult + 4);
StrSub(szmsg2,szfilename,nresult + 4,200);
szfilename = "\"" + szmsg1 + "\"" +szmsg2;
endif;
ExFn_DeleteFolderIcon(szFolder,szfilename);
szFolder = FOLDER_PROGRAMS
+"http://www.cnblogs.com/lzh-boy/admin/file:///;
szfilename = TARGETDIR+ "\\存储过程测试http://www.cnblogs.com/lzh-boy/admin/file://test_app.exe/";
ExFn_DeleteFolderIcon(TARGETDIR,szfilename);
endif;
end;
//删除目录和快捷方式
function ExFn_DeleteFolderIcon(FOLDER,ICON)
begin
// Display the folder.
//ShowProgramFolder (FOLDER, SW_SHOW);
//Delay (3);
// Delete the 'Notepad Example' icon.
if (DeleteFolderIcon (FOLDER, ICON) < 0) then
MessageBox ("删除快捷方式失败.ICON:"+ICON, SEVERE);
endif;
// Delete the 'Example folder' icon.
if (DeleteProgramFolder (FOLDER) < 0) then
//删除第一个快捷方式的时候这个目录删除是失败的,但第二个快捷方式被删除的时候
就不会失败了
//MessageBox ("删除目录失败.FOLDER:"+FOLDER, SEVERE);
endif;
end;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端