Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

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

Аватара для ErikPshat

Пользователь


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

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


Цитата boss911:
Предложу использовать библиотеку KillProc.dll для Inno Setup. »
Не понимаю зачем, если это делается стандартными средствами. Ну может быть для кого-то это может оказаться единственно рабочим решением.

Цитата Chudmin:
И всё-таки, у Elchupacabra этот процесс происходит сразу же после запуска инсталятора, КАК? »
Ну так всё зависит от того, когда выполняется ваш код. Сколько у вас файлов в секции [Files] и когда они запускаются?
Скорее всего ваши файлы смирно сидят в инсталляторе и терпеливо ждут, пока юзер не пройдёт все этапы, проставит галочки, там создавать ярдыки на рабочем столе, выбирает дополнения, путь установки, а тоько в заключении жмёт кнопку "Установить". Вот тогда и активируется ваша "Моя_прога.exe", а перед её запуском и начинается поиск процесса и его уничтожение.

Чтобы процесс уничтожался сразу при запуске инсталлятора, нужно чтобы у вас в [Files] был бы назначен на BeforeInstall какой-нибудь файлик, который бы извлекался в %TEMP% именно при запуске инсталлятора, а не по нажатию кнопки "Установить".

Для примера, вы можете прикрепить к инсталлятору Сплэш-заставку и заодно на неё повесить убийцу процесса:
Код: Выделить весь код
[Files]
; Файлы Splash-заставки, загружаются первыми 
Source: Include\isgsg.dll; DestDir: {tmp}; Flags: dontcopy nocompression; BeforeInstall: TaskKill('Моя_прога.exe')
Source: Include\Splash.png; DestDir: {tmp}; Flags: dontcopy nocompression
В секции [ Code ] объявляете процедуру заставки и процедуру убийцы процесса в самом начале:
Код: Выделить весь код
[ Code ]
{ Splash заставка }
procedure ShowSplashScreen(p1:HWND;p2:AnsiString;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer);
    external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';
procedure TaskKill(FileName: String);var ResultCode: Integer;begin
    Exec(ExpandConstant('taskkill.exe'),'/f /im '+'"'+FileName+'"','',SW_HIDE,ewWaitUntilTerminated,ResultCode);end;
Этот код извлечения и запуска заставки вставляете в нужном вам месте. Я её разместил после всей массы программного кода в конец, но перед отрисовкой формы окна:
Код: Выделить весь код
{ Splash заставка }
procedure Splash();
begin
  ExtractTemporaryFile('Splash.png');
  ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}\Splash.png'),500,800,500,0,255,True,$FFFFFF,10);
end;
И в конце кода инициализируете её:
Код: Выделить весь код
procedure InitializeWizard();
begin
  Splash();
end;
Таким образом, при запуске программы сразу извлекаются файлы заставки в %TEMP% и запускается заставка перед стартом инсталлятора, но ещё перед этим, запускается убийца процесса, потому что на файл заставки выставлен флаг BeforeInstall.

Последний раз редактировалось ErikPshat, 23-10-2018 в 08:46.


Отправлено: 21:21, 22-10-2018 | #110