您的位置:首页 > 其它

NSIS—程序互斥函数(只能运行一个安装程序,安装时不能卸载)

2012-05-17 09:45 1191 查看
/************************

CheckMutex.nsi

************************/

;NSIS 安装程序与卸载程序互相检查互斥的例子

;编写:zhfi

#定义自己的互斥名称:#

#注意安:装程序不能与卸载程序相同!#

!define MyMutex_Install "MyMutex_Install"

!define MyMutex_UnInstall "MyMutex_UnInstall"
!include "LogicLib.nsh"

;安装程序部分
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

;卸载程序部分
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐