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 .onInitInitPluginsDirCall CreateMutexFunctionEnd 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 ReCheckQuit${ElseIf} $R2 != 0 MessageBox MB_RetryCancel|MB_ICONEXCLAMATION "卸载程序已经运行!" IdRetry ReCheckQuit${Else}#创建安装互斥:# System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${MyMutex_Install}") i .R1 ?e'Pop $R0 StrCmp $R0 0 +2Quit${EndIf}FunctionEnd Section Install SetOutPath $EXEDIR WriteUninstaller "$EXEDIR\Uninstall.exe"SectionEnd ;--------------------------------;卸载程序部分 Function un.onInitInitPluginsDirCall un.CreateMutexFunctionEnd 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 ReCheckQuit${ElseIf} $R2 != 0 MessageBox MB_RetryCancel|MB_ICONEXCLAMATION "卸载程序已经运行!" IdRetry ReCheckQuit${Else}#创建卸载互斥:# System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${MyMutex_UnInstall}") i .R1 ?e'Pop $R0 StrCmp $R0 0 +2Quit${EndIf}FunctionEnd Section Uninstall SetOutPath $EXEDIR Delete "$EXEDIR\Uninstall.exe"SectionEnd #脚本结束!#

 

推荐阅读

    excel怎么用乘法函数

    excel怎么用乘法函数,乘法,函数,哪个,excel乘法函数怎么用?1、首先用鼠标选中要计算的单元格。2、然后选中单元格后点击左上方工具栏的fx公

    excel中乘法函数是什么?

    excel中乘法函数是什么?,乘法,函数,什么,打开表格,在C1单元格中输入“=A1*B1”乘法公式。以此类推到多个单元。1、A1*B1=C1的Excel乘法公式

    标准差excel用什么函数?

    标准差excel用什么函数?,函数,标准,什么,在数据单元格的下方输入l标准差公式函数公式“=STDEVPA(C2:C6)”。按下回车,求出标准公差值。详细

    计算机正常运行中死机故障的解决

    计算机正常运行中死机故障的解决,,通常有三个问题,如黑屏、花屏和蓝屏。 故障1:散热 拆卸机箱、使用皮老虎、冷发等工具来清理机箱内的灰尘

    怎么检测电脑硬件问题

    怎么检测电脑硬件问题,电脑硬件,检测,怎么,电脑硬件故障的几种简单检查方法:一、首先确定你的电源已经打开、所有的连线全部连接到位。笔