Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.138.124.143] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
помогите пожалуйста.. очень нужно..
|
Сообщ.
#17
,
|
|
|
Приведи полный код.
|
Сообщ.
#18
,
|
|
|
В программе:
// создается событие для выключения программы: hTermEvent := CreateEvent(nil, false, false, TermEventName); CloseHandle(CreateThread(nil, 0, @ThreadTerminateEvent, nil, 0, idThread)); function ThreadTerminateEvent(Param: Pointer): DWORD; stdcall; begin WaitForSingleObject(hTermEvent, INFINITE); // сохраняем то что нужно сохранить и выключаем программу Application.Terminate; Result := 0; end; В библиотека которая встраивается в инсталлятор Setup.dll: function TerminatePrg: boolean; stdcall; var hTermEvent: THandle; begin hTermEvent := CreateEvent(nil, false, false, TermEventName); if GetLastError = ERROR_ALREADY_EXISTS then SetEvent(hTermEvent); CloseHandle(hTermEvent); Result := true; end; exports TerminatePrg; В самом инсталляторе: [Files] Source: "E:\Setup\Setup.dll"; Flags: dontcopy [Code] function TerminatePrg: boolean; external 'TerminatePrg@files:Setup.dll stdcall'; [UninstallDelete] Name: "{app}\MyProg.exe"; Type: files; Check: TerminatePrg |
Сообщ.
#19
,
|
|
|
Кстати, да. Есть такой баг у Inno, а может это фича, касаема "could not call proc" из некоторых мест скрипта.
Вот куски моего скрипта: [Files] Source: "sputil.dll"; Flags: dontcopy ... function UnInstall(UserPassword: PChar): Boolean; external 'UnInstall@files:sputil.dll stdcall'; function InitializeUninstall(): Boolean; begin Result := UnInstall('some_pass'); end; ... Так вот, единственный способ прекратить деинсталляцию, который я знаю - это отдать False при вызове InitializeUninstall. С другой стороны, в InitializeUninstall невозможно вызвать функцию из моей подключаемой библиотеки sputil.dll. Inno пишет "could not call proc". В то же время, если перенести вызов функции UnInstall из sputil.dll куда нибудь подальше вроде CurUninstallStepChanged, то естественно она зовется, но уже поздно, отменить инсталляцию нельзя. А мне нужно запросить пароль, отдать его на растерзание функции UnInstall и в зависимости от этого запретить/разрешить деинсталляцию. Посоветуйте, как быть |
Сообщ.
#20
,
|
|
|
Цитата Dmitry_177 @ В самом инсталляторе: [Files] Source: "E:\Setup\Setup.dll"; Flags: dontcopy [Code] function TerminatePrg: boolean; external 'TerminatePrg@files:Setup.dll stdcall'; [UninstallDelete] Name: "{app}\MyProg.exe"; Type: files; Check: TerminatePrg Ну, а так: [UninstallDelete] Name: "{app}\MyProg.exe"; Type: files; Check: TermService [Code] function TerminatePrg: boolean; external 'TerminatePrg@files:Setup.dll stdcall'; Function TermService:boolean; begin Result:=TerminatePrg; end; |