Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.134.81.206] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте. Подскажите как можно убить процесс перед началом удаления программы? При старте программы у меня получилось сделать.
function InitializeSetup(): Boolean; begin If RunTask('Test.exe', false) then begin if MsgBox('File Test.exe are using. Close this file and continue installing?', mbInformation, mb_YesNo) = idYes then begin KillTask('Test.exe'); Result:= True; end else Exit; end; Result:=True; end; Функция KillTask и RunTask взяты с библиотеки isxdl.dll. Но почему то такой же код только для удаления не работает function InitializeUninstall(): Boolean; begin If RunTask('Test.exe', false) then begin if MsgBox('File Test.exe are using. Close this file and continue uninstalling?', mbInformation, mb_YesNo) = idYes then begin KillTask('Test.exe'); Result:= True; end else Exit; end; Result:=True; end; Ошибка была при загрузке загрузке длл. function KillTask(ExeFileName: string): Integer; external 'KillTask@files:ISTask.dll stdcall delayload'; function RunTask(FileName: string; bFullpath: Boolean): Boolean; external 'RunTask@files:ISTask.dll stdcall delayload'; function KillTask(ExeFileName: string): Integer; external 'KillTask@{app}\ISTask.dll stdcall delayload'; function RunTask(FileName: string; bFullpath: Boolean): Boolean; external 'RunTask@{app}\ISTask.dll stdcall delayload'; Source: ISTask.dll; DestDir: "{app}" Ошибка после изменений "An attempt was made to expand the "app" constant before it was inicialized" |
Сообщ.
#2
,
|
|
|
А если так?
function KillTask(ExeFileName: string): Integer; external 'KillTask@files:ISTask.dll stdcall setuponly'; function RunTask(FileName: string; bFullpath: Boolean): Boolean; external 'RunTask@files:ISTask.dll stdcall setuponly'; function KillTask(ExeFileName: string): Integer; external 'KillTask@{app}\ISTask.dll stdcall uninstallonly'; function RunTask(FileName: string; bFullpath: Boolean): Boolean; external 'RunTask@{app}\ISTask.dll stdcall uninstallonly'; PS: В директории Inno Setup\Examples есть пример CodeDll.iss, посмотри его. |
Сообщ.
#3
,
|
|
|
Цитата Kray74 @ А если так? function KillTask(ExeFileName: string): Integer; external 'KillTask@files:ISTask.dll stdcall setuponly'; function RunTask(FileName: string; bFullpath: Boolean): Boolean; external 'RunTask@files:ISTask.dll stdcall setuponly'; function KillTask(ExeFileName: string): Integer; external 'KillTask@{app}\ISTask.dll stdcall uninstallonly'; function RunTask(FileName: string; bFullpath: Boolean): Boolean; external 'RunTask@{app}\ISTask.dll stdcall uninstallonly'; PS: В директории Inno Setup\Examples есть пример CodeDll.iss, посмотри его. Пишет дублирование функций. Я смотрел пример в CodeDll.iss. Я не могу придумать как сделать чтоб работало для удаления и перед установкой. Source: ISTask.dll; DestDir: "{app}" function KillTask(ExeFileName: string): Integer; external 'KillTask@ISTask.dll stdcall setuponly'; Source: ISTask.dll; DestDir: "{app}" function KillTask(ExeFileName: string): Integer; external 'KillTask@{app}\ISTask.dll stdcall setuponly'; Source: ISTask.dll; DestDir: "{app}" function KillTask(ExeFileName: string): Integer; external 'KillTask@files:ISTask.dll stdcall delayload'; |
Сообщ.
#4
,
|
|
|
Цитата Craft @ Я смотрел пример в CodeDll.iss ...и не заметил, что там показано как раз то, что тебе и нужно. [Files] Source: ISTask.dll; DestDir: "{app}" [Code] function KillTask(ExeFileName: string): Integer; external 'KillTask@files:ISTask.dll stdcall setuponly'; function RunTask(FileName: string; bFullpath: Boolean): Boolean; external 'RunTask@files:ISTask.dll stdcall setuponly'; function KillTaskU(ExeFileName: string): Integer; external 'KillTask@{app}\ISTask.dll stdcall uninstallonly'; function RunTaskU(FileName: string; bFullpath: Boolean): Boolean; external 'RunTask@{app}\ISTask.dll stdcall uninstallonly'; Так дублирования не будет т.к. ф-ции для деинсталляции импортируются в скрипт под другим названием (с суффиксом U например). |
Сообщ.
#5
,
|
|
|
Цитата mitrich @ Цитата Craft @ Я смотрел пример в CodeDll.iss ...и не заметил, что там показано как раз то, что тебе и нужно. [Files] Source: ISTask.dll; DestDir: "{app}" [Code] function KillTask(ExeFileName: string): Integer; external 'KillTask@files:ISTask.dll stdcall setuponly'; function RunTask(FileName: string; bFullpath: Boolean): Boolean; external 'RunTask@files:ISTask.dll stdcall setuponly'; function KillTaskU(ExeFileName: string): Integer; external 'KillTask@{app}\ISTask.dll stdcall uninstallonly'; function RunTaskU(FileName: string; bFullpath: Boolean): Boolean; external 'RunTask@{app}\ISTask.dll stdcall uninstallonly'; Так дублирования не будет т.к. ф-ции для деинсталляции импортируются в скрипт под другим названием (с суффиксом U например). Кстати так вчера и сделал . |
Сообщ.
#6
,
|
|
|
Блин, я тоже просмотрел
|
Сообщ.
#7
,
|
|
|
Подскажите где взять istask.dll? в папке innosetup его нет.
|
Сообщ.
#8
,
|
|
|
Уже и не помню, откуда я его скачал...
Прикреплённый файлISTask.zip (36,3 Кбайт, скачиваний: 375) |