自定义简单卸载(删开始菜单快捷方式 删桌面快捷方式 删整个文件夹)


prototype BOOL Shell32.SHGetSpecialFolderPathA( POINTER,BYREF STRING,NUMBER,NUMBER); export prototype DeleteSpecialXiaosan(); export prototype DeleteFileXiaosan(); function DeleteFileXiaosan() STRING szKey, szKeyName, szKeyValue; NUMBER nType, nSize; begin szKey="//SOFTWARE//Microsoft//Windows//CurrentVersion//Uninstall//{49146ABF-1B27-4BF2-A8CF-9F047A869AFD}"; szKeyName = "InstallLocation"; nType = REGDB_NUMBER; RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE); RegDBGetKeyValueEx (szKey, szKeyName, nType, szKeyValue, nSize); //testing MessageBox (szKeyValue, SEVERE); if(DeleteDir( szKeyValue, ALLCONTENTS ) < 0) then MessageBox ("删除旧程序错误,请确认旧程序是否已关闭/n请手动删除"+szKeyValue+"后按确定", SEVERE); endif; RegDBDeleteKey (szKey); end; function DeleteSpecialXiaosan() STRING szDir,szTemp,svFileName; NUMBER nFlag,nTemp; begin//先处理文件夹 再处理桌面快捷方式 nFlag=0; svFileName="Initial"; SHGetSpecialFolderPathA(NULL, szDir, 0x0017, 0); szTemp=szDir+"//Multech"; loop: if( ExistsDir(szTemp) = EXISTS)then FindAllFiles ( szTemp, "*.*", svFileName, RESET ); if(svFileName="卸载HCarve")then FindAllFiles ( szTemp, "*.*", svFileName, CONTINUE ); endif; goto loopend; endif; if(nFlag!=1)then nFlag=1; szTemp=szDir+"//众泰克"; goto loop; endif; /* if(nFlag!=2)then nFlag=2; szTemp=szDir+"//原力雕刻"; goto loop; endif; */ //走到这里说明找不到快捷方式 MessageBox ("请手动删除软件快捷方式!", SEVERE); goto endaaa; loopend: DeleteDir(szTemp,ALLCONTENTS);//删除开始菜单中快捷方式 if(StrFind(svFileName,"卸载")>=0)||(svFileName="Initial")then MessageBox ("请手动删除桌面残余快捷方式!", SEVERE); goto endaaa; endif; nTemp=0; A: //获取桌面快捷方式 nTemp=StrFindEx(svFileName,"//",nTemp+1); // SprintfBox (INFORMATION, "System Information", "nTemp is %d.",nTemp); if(nTemp>=0)then nFlag= nTemp; goto A; endif;//快捷方式名 不含路径 StrSub ( szTemp, svFileName, nFlag, 25); SHGetSpecialFolderPathA(NULL, szDir, 0x0010, 0);//私人桌面路径 svFileName=szDir+szTemp; DeleteFile(svFileName); SHGetSpecialFolderPathA(NULL, szDir, 0x0019, 0); //公共桌面路径 svFileName=szDir+szTemp; DeleteFile(svFileName); endaaa: nTemp=0; end; 

3个声明放在最前面,函数体可以放任意位置,第一个是winApi函数 后2个是自定义的。

 

开始菜单中文件夹名是XXXA 其中的快捷方式一个是 XXX 一个是  卸载XXX  桌面快捷方式是XXX

 

//CSIDL_COMMON_PROGRAMS 0X0017  CSIDL_DESKTOPDIRECTORY 0x0010  CSIDL_COMMON_DESKTOPDIRECTORY 0x0019

是shlobj.h中定义的 is里没有 直接用数字

你可能感兴趣的:(InstallShield)