Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1274
Благодарности: 1030

Профиль | Отправить PM | Цитировать


Цитата Zasanialhodda:
Как сделать чтобы можно было запустить только одну копию установщика без вывода сообщений ? »
Zasanialhodda, пример:
Скрытый текст

Код: Выделить весь код
#define AppMutex "MySuperPuperMutexUniqueName"

[Setup]
AppName=test
AppVerName=test
DefaultDirName={tmp}\test
CreateAppDir=no
Uninstallable=no
CreateUninstallRegKey=no

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[Code]
#define A = (Defined UNICODE) ? "W" : "A"
function WINAPI_CreateMutex(lpMutexAttributes: Longint; bInitialOwner: BOOL; lpName: string): THandle; external 'CreateMutex{#A}@kernel32.dll stdcall';
function ReleaseMutex(hMutex: THandle): BOOL; external 'ReleaseMutex@kernel32.dll stdcall';
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';

const
  ERROR_ACCESS_DENIED = $0005;
  ERROR_ALREADY_EXISTS = $00B7;

var
  GMutex: THandle;

//////////////////////////////////
function InitializeSetup: Boolean;
var
  L: Longint;
begin
  GMutex := WINAPI_CreateMutex(0, False, '{#AppMutex}');
  L := DLLGetLastError;
  if (GMutex = 0) or (L = ERROR_ACCESS_DENIED) then
    RaiseException(SysErrorMessage(L));
  Result := L <> ERROR_ALREADY_EXISTS;
end;

////////////////////////////
procedure DeinitializeSetup;
begin
  if GMutex <> 0 then
  begin
    ReleaseMutex(GMutex);
    CloseHandle(GMutex);
    GMutex := 0;
  end;
end;

Последний раз редактировалось El Sanchez, 01-08-2016 в 13:36.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:16, 01-08-2016 | #1634