杉宫竹苑工作室

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2135|回复: 0

NSIS:强制结束软件进程

[复制链接]
发表于 2015-2-3 22:09:21 | 显示全部楼层 |阅读模式

正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

x

有时候,我们选择卸载软件后发现安装目录中的主文件依然存在,不是我们卸载代码写的不对,而是卸载的时候软件根本就没有关闭!

在卸载前加上下面这个宏可以在一定程度上免除上述的尴尬,不信,你就试试!

注: 本宏可用于删除程序前使用!判断用户的程序是否仍在运行,如果运行,就将其进程结束,再删除程序。

代码如下:

  1. outfile "test.exe"    ;www.flighty.cn
  2. var exestr            ;可以是多个进程名,用";"号断开
  3. var len1
  4. var len2
  5. var leni
  6. Var len
  7. var sun
  8. var len3
  9. var len4
  10. !macro ExeEnd  exestr
  11.    strlen $sun "${exestr}"
  12.    intop $len3 0 + 0
  13.    intop $len4 0 + 0
  14.    intop $len 0 + 0
  15.    intop $leni 0 + 0
  16.    strcmp $sun 0 +12 0                    ;是否到了字符串的尾端!
  17.    IntOp $leni $leni + 1                  ;截取字符的长度增加!
  18.    StrCpy $len1 "${exestr}" $leni $len3   ;截取字符,并保存与len1中
  19.    StrCpy $len2 "$len1" "" -1             ;取出Len1最后一个字符放入Len2中
  20.    Strcmp $len2 ";" 0 +9                  ;判断Len2中的字符是不是";"如果是,表示这以经是一个进程名了!如果不是,刚跳过下面的宏,继续取!              
  21.    strcpy $len $len1 -1
  22.    FindProcDLL::FindProc "$len" ;查找进程是否存在!
  23.    StrCmp $R0 1 0 +2
  24.    KillProcDLL::KillProc "$len" ;杀掉进程,此处应注意,不是所有程序的进程都能杀掉,有些进程用这个方法无法结束!
  25.    intop $leni 0 + 0
  26.    strlen $len4 "$len1"  
  27.    intop $len3 $len3 + $len4
  28.    strcpy $len1 ""  
  29.    IntOp $sun $sun - 1     ;字符串长度减1
  30.    strcmp $sun 0 0 -13     ;此处判断字条串长度如果为0则到了尾端了!
  31.    ;杀掉最后一个进程文件!
  32.    FindProcDLL::FindProc "$len1" ;查找譔进程是否存在!
  33.    StrCmp $R0 1 0 +2
  34.    KillProcDLL::KillProc "$len1" ;杀掉进程,此处应注意,不是所有程序的进程都能杀掉,有些进程用这个方法无法结束!
  35. !macroend
  36. Section
  37. !insertmacro ExeEnd "cmd.exe;2.exe;3.exe;4.exe;5.exe;6.exe;hh.exe;hfkjc.exe"  ;这是你要结束的进程
  38. sectionend
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SgzyStudio

GMT+8, 2024-5-15 11:28 , Processed in 0.116144 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表