Показать полную графическую версию : [архив] Скрипты Inno Setup. Помощь и советы [часть 2]
alex2010, ага, если руки прямые :D
Может, тогда кто-нибудь поможет этот скрипт довести до ума? А то не хочет распаковывать ФриАрк архивы :(
http://rapid.ufanet.ru/9585636
Так не написал, т.к. форум не позволяет. Больше 30000 символов в скрипте.
Как принудительно завершить программу установки из секции код?
cleric1985_n
13-04-2010, 23:18
Надо смотреть на каком этапе это нужно..
Вот скажем, на этапе установки...
[Files]
Source: ISTask.dll; DestDir: {tmp}; Flags: dontcopy
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 InitializeSetup(): Boolean;
begin
If RunTask('file.exe', false) then
begin
if MsgBox('Программа file.exe используется. Закрыть и продолжить установку?', mbInformation, mb_YesNo) = idYes then
begin
KillTask('file.exe');
Result:= True;
end else
Exit;
end;
Result:=True;
end;
Или же на этапе удаления
[Files]
Source: ISTask.dll; DestDir: {app}; Flags: ignoreversion
// функции используемые при деинсталляции
// RunTask@{app}\ISTask.dll - название функции (в данном случае, если программа работает)
// и путь dll'ки где она расположена...
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';
function KillTask(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
if RunTask('file.exe', False) then
begin
// прячем форму
UninstallProgressForm.Visible:= False;
if MsgBox('Программа file.exe используется. Закрыть и продолжить удаление?', mbConfirmation, MB_YESNO) = IDYES then
begin
KillTask('file.exe');
UnloadDll(ExpandConstant('{app}\ISTask.dll'));
// показываем форму
UninstallProgressForm.Visible:= True;
end
else
begin
MsgBox('Завершите работу file.exe, затем снова запустите программу удаления.', mbInformation, MB_OK);
UnloadDll(ExpandConstant('{app}\ISTask.dll'));
Abort;
end;
end;
end;
А также библиотека
cleric1985_n, а можешь продолжить это же самое, только if not IsWin64... KillTask() ?
Или это не совсем то что здесь надо? Мне надо запретить установку на x86 системе.
cleric1985_n
14-04-2010, 11:26
А зачем тогда завершать? просто возьмите проверку системы..т.е. если не х64, то не устанавливать.....вроди в самом инно есть такая проверка..
Habetdin
14-04-2010, 16:53
semiono, function InitializeSetup(): Boolean;
begin
if IsWin64 then
Result:= True else
MsgBox('На вашем компьютере установлена 32-битная ОС.' + #13#10
'Установка невозможна!', mbInformation, MB_OK);
end;
Chelluga
14-04-2010, 18:18
У мну пара вопросов к народу. Народ:
1. Почему инно не распознаёт оранжевый цвет? То-есть clOrange.
Есть ли аналог или как это будет выглядеть в инновских цифирках (подобное - #FF7F00 пробовал - инно и это не понимает)?
2. Я хочу запустить одну прогу после фриарка, но у мну она запускается до (соответственно сразу и закрывается ибо не находит, что ищет). Как это пофиксить?
3. Цвет фриарка (то-бишь инфа о распаковываемом файле и т.п.) белая, а мне нужен иной цвет. Облазил код - не нашёл. Ни одного упоминания на фонтколор фриарка...Мож я невнимательный?
Кто поможет?
Заранее спасибо.
Snikt! , Во 1 этот скрипт полностью стабилен,
во 2 эт я его просил =))))
cleric1985_n
14-04-2010, 20:30
Можно и так, но а не проще как предложил Habetdin ?
т.е запускать самому последовательно файлы… »
Вариант хороший, если бы не одно но, а именно...файл 2 не запускается самостоятельно, а исключительно при запуске из файла 1,т.е. извлекается из первого..но сохранить его и потом запустить отдельно увы невозможно...так что не подходит такой способ..нужно именно отследить, а не запустить и отследить...
Habetdin
14-04-2010, 22:37
cleric1985_n, if Exec(ExpandConstant('{app}\file1.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then »
Выделенное означает, что инсталлятор будет ждать, пока не закроется file1.exe.
Можно еще ResultCode проверять для надежности :)
cleric1985_n
14-04-2010, 23:31
Выделенное означает, что инсталлятор будет ждать, пока не закроется file1.exe.
Можно еще ResultCode проверять для надежности »
Вы снова не поняли...файл1 извлекает файл2 и запускает его, а сам в это время закрывается..:)), оставляя за собой запущенный файл 2, завершения которого и необходимо ждать...
Habetdin
14-04-2010, 23:35
cleric1985_n, может переделать "файл1"? :)
cleric1985_n
14-04-2010, 23:58
Habetdin Если бы...но это сторонний файл, исходного кода которого у меня нету...
2. Я хочу запустить одну прогу после фриарка, но у мну она запускается до (соответственно сразу и закрывается ибо не находит, что ищет). Как это пофиксить? »
единственное могу помочь с этим
Вот здеся всё описано (http://forum.oszone.net/post-1215243.html#post1215243)
Chelluga
15-04-2010, 14:03
ViCK_kz,
Увы, не помогло...но всё-равно спасибо)
constant
15-04-2010, 16:45
Люди, использую pack.exe и ext.exe (для того чтобы достать файлы с игровых архивов (например для игры Метро 2033)).
Но всегда при распаковке или упаковке даёт ошибку.
Дайте пожалуйста примеры батников
В среде Win 7 x64 не срабатывает стандартная запись:
[Run]
Filename: {win}\regedit.exe; Parameters: /s reg.reg; WorkingDir: {app};
При ручном запуске reg.reg всё прописывается, правда, после закрытия дурацкого окна с предупреждением системы безопасности.
В то же время в Win XP и в Win 7 x32 эта же запись в скрипте работает.
Где копать?
RedBishep
16-04-2010, 15:19
Привет всем !
Вот решил спросить у каво нибудь такая проблема наблюдалась : Inno Setup 5.3.6
Создал Сетап работает всё нормально устанавливается и т.д но..... Когда хочу удалить сетап с компа пишет что программа используется другим приложением и т.д и т.п сморел в диспетчере нечего лишнего и связанного нету.... думал вирус.. проверял двумя антивирусами Касперским и Dr.Web нечего не нашли ... , Думал из-за самого Inno setup установил 5,3,5 тоже самое ....кароче говоря пробывал все варианты которые знаю нечего не помогает не считая формата....
с 40% сетап-ов появляется такая проблема.! =(
Может из-за скриптов хотя ... вроде всё норм вот пример 1 скрипта
[Setup]
AppName=WoW Frozen Throne
AppVerName=WoW Frozen Throne
AppPublisher=RedBishep
DefaultDirName={pf}\WoW Frozen Throne
DefaultGroupName=WoW Frozen Throne
AllowNoIcons=yes
OutputDir=C:\Documents and Settings\RedBishep\Рабочий стол
OutputBaseFilename=SetupW
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Icons]
Name: "{group}\Frozen Throne"; Filename: "{app}\Frozen Throne.exe"
Name: "{group}\Warcraft III"; Filename: "{app}\Warcraft III.exe"
Name: "{group}\{cm:UninstallProgram,WoW Frozen Throne}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\Frozen Throne"; Filename: "{app}\Frozen Throne.exe"; Tasks: desktopicon
Name: "{commondesktop}\Warcraft III"; Filename: "{app}\Warcraft III.exe"; Tasks: desktopicon
[Files]
Source: "D:\data.exe"; DestDir: "{app}"; AfterInstall: MyAfterInstall; Flags: ignoreversion deleteafterinstall
Source: "D:\data1.exe"; DestDir: "{app}"; AfterInstall: MyAfterInstall; Flags: ignoreversion deleteafterinstall
Source: "D:\data2.exe"; DestDir: "{app}"; AfterInstall: MyAfterInstall; Flags: ignoreversion deleteafterinstall
Source: "D:\Warcraft III\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
[Code]
procedure MyAfterInstall();
var
ResultCode: Integer;
begin
begin
Exec(ExpandConstant('{app}\data.exe'), '-e -aoa -y', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
Exec(ExpandConstant('{app}\data1.exe'), '-e -aoa -y', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
Exec(ExpandConstant('{app}\data2.exe'), '-e -aoa -y', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
end
end;
[setup]
[Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usPostUninstall then
begin
DelTree(ExpandConstant('{app}'), True, True, True);
RemoveDir(ExpandConstant('{app}'));
end;
end;
Прикол ещё в том что если скопировать сетап то он копируется и перекидывается . хотя когда прога используется другим приложением прога не должна копироваться ..
Нашёл только 2 варианта избавляться от них это безопасный режим через cmd и фармат ...
Что посоветуете ? в чем может быть проблема?
Sotonisto
16-04-2010, 20:37
ChVL, а не проще сделать запись в реестре при помощи секции [Registry]?
Зачем все усложнять то? :)
Sotonisto,
Дык, с этого и начинал. Обнаружил, что запись из секции в реестр не вносится, поэтому и решил попробовать через reg файлик.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.