Вопрос по Inno Setup
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.113] |
|
|
ПРАВИЛА РАЗДЕЛА · FAQ Inno Setup
| Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Вопрос по Inno Setup
|
Сообщ.
#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; |