[Setup]: AppMutex

Описание

Эта директива используется для предотвращения установки новой версии приложения во время его работы, а также предотвращения удаления запущенного приложения. В ней указываются имена одного или нескольких именованных мьютексов (несколько мьютексов разделяются запятыми), которые программа установки и удаления будет проверять во время запуска. Если хоть один из них существует, будет выдано следующее сообщение: "Обнаружен запущенный экземпляр [AppName]. Пожалуйста, закройте все экземпляры приложения, затем нажмите «OK», чтобы продолжить, или «Отмена», чтобы выйти." Значение может содержать константы.

Для использования этой директивы в приложение требуется добавить код, который создаст мьютекс с именем, указанным в этой директиве. Примеры создания мьютекса в Delphi, C и Visual Basic показаны ниже. Этот код должен быть выполнен во время запуска приложения.

Delphi:

CreateMutex(nil, False, 'MyProgramsMutexName');

C:

CreateMutex(NULL, FALSE, "MyProgramsMutexName");

Visual Basic (написал Peter Young):

'Place in Declarations section:
Private Declare Function CreateMutex Lib "kernel32" _
        Alias "CreateMutexA" _
       (ByVal lpMutexAttributes As Long, _
        ByVal bInitialOwner As Long, _
        ByVal lpName As String) As Long

'Place in startup code (Form_Load or Sub Main):
CreateMutex 0&, 0&, "MyProgramsMutexName"

Нет никакой необходимости явно уничтожать объект мьютекса по завершении работы приложения, система сделает это автоматически. Также не рекомендуется этого делать, потому что в идеале объект мьютекса должен существовать до полного завершения процесса.

Обратите внимание, что сравнение имён мьютексов в Windows выполняется с учётом регистра.

Чтобы указать мьютекс с именем, содержащим запятую, экранируйте запятую обратной косой чертой.

Дополнительные сведения о мьютексах смотрите в разделе "CreateMutex" справки MS SDK.

Пример:
AppMutex=MyProgramsMutexName,Global\MyProgramsMutexName

См. также:

SetupMutex
CloseApplications