IT袋

当前位置:主页 > 经验教程 > 建站编程 >

NSIS 检测防止程序重复同时运行

NSIS 程序互斥函数 检测防止程序重复同时运行

更新:2023-08-08 07:08:08 来源:IT袋 作者:马勇
导读:NSIS 检测防止程序重复同时运行,对于有过编程基础的人来说,防止程序重复同时运行是一件必做而又严谨的事情,NSIS打包安装程序也不例外,下面IT袋小编将给大家分享 NSIS 程序互斥函数 检测防止程序

NSIS 检测防止程序重复同时运行

NSIS 检测防止程序重复同时运行

对于有过编程基础的人来说,防止程序重复同时运行是一件必做而又严谨的事情,NSIS打包安装程序也不例外,下面IT袋小编将给大家分享NSIS 程序互斥函数 检测防止程序重复同时运行

NSIS 检测防止程序重复同时运行

代码分享:

/************************
      CheckMutex.nsi
************************/
;NSIS 安装程序与卸载程序互相检查互斥的例子
;编写:ITmemo.cn
#定义自己的互斥名称:#
#注意安:装程序不能与卸载程序相同!#
!define MyMutex_Install     "MyMutex_Install"
!define MyMutex_UnInstall   "MyMutex_UnInstall"
 
;--------------------------------
;Include Modern UI
 
!include "MUI.nsh"
!include "LogicLib.nsh"
 
;--------------------------------
;General
 
  ;Name and file
  Name "Mutex Test"
  OutFile "Mutex.exe"
 
;--------------------------------
#添加安装页面:#
  !insertmacro MUI_PAGE_Welcome
  !insertmacro MUI_PAGE_InstFiles
  !insertmacro MUI_PAGE_Finish
#添加卸载页面:#
  !insertmacro MUI_UNPAGE_Welcome
  !insertmacro MUI_UNPAGE_InstFiles
  !insertmacro MUI_UNPAGE_Finish
 
;--------------------------------
;加入语言文件
 
  !insertmacro MUI_LANGUAGE "SimpChinese"
 
;--------------------------------
;安装程序部分
 
Function .onInit
InitPluginsDir
Call CreateMutex
FunctionEnd
 
Function CreateMutex
#检查安装互斥:#
ReCheck:
  System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${MyMutex_Install}") i .R1 ?e'
Pop $R0
  System::Call 'kernel32::CloseHandle(i R1) i.s'
#检查卸载互斥:#
  System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${MyMutex_UnInstall}") i .R3 ?e'
Pop $R2
  System::Call 'kernel32::CloseHandle(i R3) i.s'
#判断安装/卸载互斥的存在#
${If} $R0 != 0
  MessageBox MB_RetryCancel|MB_ICONEXCLAMATION "安装程序已经运行!" IdRetry ReCheck
Quit
${ElseIf} $R2 != 0
  MessageBox MB_RetryCancel|MB_ICONEXCLAMATION "卸载程序已经运行!" IdRetry ReCheck
Quit
${Else}
#创建安装互斥:#
  System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${MyMutex_Install}") i .R1 ?e'
Pop $R0
  StrCmp $R0 0 +2
Quit
${EndIf}
FunctionEnd
 
Section Install
  SetOutPath $EXEDIR
  WriteUninstaller "$EXEDIR\Uninstall.exe"
SectionEnd
 
;--------------------------------
;卸载程序部分
 
Function un.onInit
InitPluginsDir
Call un.CreateMutex
FunctionEnd
 
Function Un.CreateMutex
#检查安装互斥:#
ReCheck:
  System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${MyMutex_Install}") i .R1 ?e'
Pop $R0
  System::Call 'kernel32::CloseHandle(i R1) i.s'
#检查卸载互斥:#
CheckUnInstall:
  System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${MyMutex_UnInstall}") i .R3 ?e'
Pop $R2
  System::Call 'kernel32::CloseHandle(i R3) i.s'
#判断安装/卸载互斥的存在#
${If} $R0 != 0
  MessageBox MB_RetryCancel|MB_ICONEXCLAMATION "安装程序已经运行!" IdRetry ReCheck
Quit
${ElseIf} $R2 != 0
  MessageBox MB_RetryCancel|MB_ICONEXCLAMATION "卸载程序已经运行!" IdRetry ReCheck
Quit
${Else}
#创建卸载互斥:#
  System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${MyMutex_UnInstall}") i .R1 ?e'
Pop $R0
  StrCmp $R0 0 +2
Quit
${EndIf}
FunctionEnd
 
Section Uninstall
  SetOutPath $EXEDIR
  Delete "$EXEDIR\Uninstall.exe"
SectionEnd
 
#脚本结束!#

上述就是NSIS 程序互斥函数 检测防止程序重复同时运行的经验介绍,您知道了吗?

相关阅读

  • 注册域名的网站有哪些 网上注册平台介绍

    注册域名的网站有哪些 网上注册平台介绍

    跟大家分享注册域名的网站有哪些和网上注册平台介绍的相关经验,相关内容具体如下: 很多客户在做网站之前知道自己需要一个网址,但是却不知道怎么注册域名,在哪里注册域名,那个域

  • 二级域名怎么注册 二级域名注册平台及流程

    二级域名怎么注册 二级域名注册平台及流程

    今天带来的IT技巧小经验二级域名怎么注册和二级域名注册平台及流程的介绍,接下来小编为网友介绍。 什么是二级域名? 按照严格的标准来划分,顶级域名的下一级才是二级域名。其中顶级

  • 网站设计是什么工作 网页设计的工作岗位介绍

    网站设计是什么工作 网页设计的工作岗位介绍

    今天带来的IT技巧小经验网站设计是什么工作和网页设计的工作岗位介绍IT技巧方面的经验,具体详情如下: 网页设计师是一种专业人员,他们负责为网站或应用程序设计用户界面和视觉元素。

  • 如何创建一个网页前端 web创建一个简单网页教程

    如何创建一个网页前端 web创建一个简单网页教程

    IT电脑小知识篇,关于如何创建一个网页前端和web创建一个简单网页教程的相关知识,接下来就是全面介绍。 首先我要说学习前端网页制作其实很简单! 今天我带着你踏入前端开发的大门,我