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

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

Аватара для Johny777

Ветеран


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

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


Цитата Gnom_aka_Lexander:
готов спорить, что в этой проверке сам TCheckListBox вообще никак не участвует »
да фиг с ним!

==================================================================================================== =====

Цитата insombia:
у кого-то есть пример чтобы если инсталл уже запущен то 2 раз его нельзя запустить пока не закроется 1? »
1. через создание мьютекса встроенными средствами - CreateMutex(...): http://forum.oszone.net/post-1708051-2236.html

2. через создание семафора - CreateSemaphore(...) :
читать дальше »
Код: Выделить весь код
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

const
  SYNCHRONIZE = $00100000;
  STANDARD_RIGHTS_REQUIRED = $000F0000;
  SEMAPHORE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $3);
  
  SEMAPHORE_UNIQUE_NAME = 'Johny777';
    
    
function CreateSemaphore(lpSemaphoreAttributes, lInitialCount, lMaximumCount: Longint; lpName: String): THandle; external 'CreateSemaphore{#A}@kernel32.dll stdcall';
function OpenSemaphore(dwDesiredAccess: DWORD; bInheritHandle: BOOL; lpName: String): THandle; external 'OpenSemaphore{#A}@kernel32.dll stdcall';
function ReleaseSemaphore(hSemaphore: THandle; lReleaseCount: Longint; lpPreviousCount: Longint): BOOL; external 'ReleaseSemaphore@kernel32.dll stdcall';
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';

var
  hSemaphore: THandle;

function InitializeSetup(): Boolean;
begin
  Result := OpenSemaphore(SEMAPHORE_ALL_ACCESS, False, SEMAPHORE_UNIQUE_NAME) = 0;
  if not Result then MsgBox('Error. Setup is running!', mbError, MB_OK);
  hSemaphore := CreateSemaphore(0, 1, 1, SEMAPHORE_UNIQUE_NAME);
end;


procedure DeinitializeSetup();
begin
  ReleaseSemaphore(hSemaphore, 1, 0);
  CloseHandle(hSemaphore);
end;

3. добавление строки в глобальный массив записей винды - GlobalAddAtom(...):
читать дальше »
Код: Выделить весь код
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

const
  ATOM_UNIQUE_NAME = 'Johny777';

type
  ATOM = Word;

function GlobalAddAtom(lpString: String): ATOM; external 'GlobalAddAtom{#A}@kernel32.dll stdcall';
function GlobalFindAtom(lpString: String): ATOM; external 'GlobalFindAtom{#A}@kernel32.dll stdcall';
function GlobalDeleteAtom(nAtom: ATOM): ATOM; external 'GlobalDeleteAtom@kernel32.dll stdcall';


var
  aAtom: ATOM;

function InitializeSetup(): Boolean;
begin
  Result := GlobalFindAtom(ATOM_UNIQUE_NAME) = 0;
  if not Result then MsgBox('Error. Setup is running!', mbError, MB_OK);
  aAtom := GlobalAddAtom(ATOM_UNIQUE_NAME);
end;


procedure DeinitializeSetup();
begin
  GlobalDeleteAtom(aAtom);
end;

4. через поиск заголовка окна своей программы:
читать дальше »
Код: Выделить весь код
function InitializeSetup(): Boolean;
begin
  Result := FindWindowByWindowName(FmtMessage(SetupMessage(msgSetupWindowTitle), ['{#SetupSetting("AppName")}'])) = 0;
  if not Result then MsgBox('Error. Setup is running!', mbError, MB_OK);
end;

5. путём сохранения скрытого файла на харде, проверке его наличия и удаления по завершении работы инсталла
читать дальше »
Код: Выделить весь код
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

const
  FILE_NAME = '\I_am_running';

function SetFileAttributes(lpFileName: String; dwFileAttributes: DWORD): BOOL; external 'SetFileAttributes{#A}@kernel32.dll stdcall';

var
  LaunchError: Boolean;

function InitializeSetup(): Boolean;
begin
  Result := not FileExists(ExpandConstant('{sd}') + FILE_NAME);
  LaunchError := Result;
  if not Result then MsgBox('Error. Setup is running!', mbError, MB_OK);
  SaveStringToFile(ExpandConstant('{sd}') + FILE_NAME, '', False);
  SetFileAttributes(ExpandConstant('{sd}') + FILE_NAME, FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_SYSTEM);
end;


procedure DeinitializeSetup();
begin
  if LaunchError then DeleteFile(ExpandConstant('{sd}') + FILE_NAME);
end;

6. как и по номеру 5. только сохранять ключ реестра. Извиняй, примера нет, тк с реестром у меня туго

7. Уверен есть ещё способы!
==================================================================================================== =================

Пацаны, подскажите пожалуйста. Хочу сохранять настройки установленной программы в реестре, на данный момент сохраняю в ини, в директории установки.
при повторном запуске гружу настройки из ини. Хочу перейти на реестр, но у меня с ним туго. Вот содержание ини:
Он заполняется единицами при необходимости
читать дальше »
Код: Выделить весь код
procedure CreateInstallINI();
begin
  SaveStringsToFile(ExpandConstant('{#SetupSetting("UninstallFilesDir")}\Install.ini'), [
    '[Parameters]',
    'Launch_hl2=',
    'Launch_hl2_ep1=',
    'Launch_hl2_ep2=',
    'Launch_portal=',
    '',
    '[Installed]',
    ';Half-Life 2',
    'hl2=',
    'hl2_ru=',
    'hl2_ru_buka=',
    'hl2_en=',
    'hl2_ru_en=',
    'AuroraB=',
    '',
    ';Half-Life 2 Episode One',
    'ep1=',
    'ep1_ru=',
    'ep1_en=',
    'ep1_ru_en=',
    '',
    ';Half-Life 2 Episode Two',
    'ep2=',
    'ep2_ru=',
    'ep2_en=',
    'ep2_ru_en=',
    '',
    ';Portal',
    'portal=',
    'portal_ru=',
    'portal_en=',
    'portal_ru_en=',
    '',
    ';Common ',
    'Start_Folder_Exist='
  ],False);
end;

мне нужно создать ключ или ключи?
просветите пожалуйста неуча

Последний раз редактировалось Johny777, 22-02-2013 в 13:37. Причина: исправления

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

Отправлено: 04:17, 22-02-2013 | #1705