InstallShield12半脚本创建反安装快捷方式

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;

posted @ 2009-11-18 21:57  架构师聊技术  阅读(7751)  评论(0)    收藏  举报