Ветеран
Сообщения: 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;
мне нужно создать ключ или ключи?
просветите пожалуйста неуча 
|