Войти

Показать полную графическую версию : [архив] Скрипты Inno Setup. Помощь и советы [часть 2]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 [86] 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Snikt!
13-04-2010, 21:31
alex2010, ага, если руки прямые :D

Может, тогда кто-нибудь поможет этот скрипт довести до ума? А то не хочет распаковывать ФриАрк архивы :(
http://rapid.ufanet.ru/9585636
Так не написал, т.к. форум не позволяет. Больше 30000 символов в скрипте.

semiono
13-04-2010, 21:48
Как принудительно завершить программу установки из секции код?

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;

А также библиотека

semiono
14-04-2010, 02:11
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. Цвет фриарка (то-бишь инфа о распаковываемом файле и т.п.) белая, а мне нужен иной цвет. Облазил код - не нашёл. Ни одного упоминания на фонтколор фриарка...Мож я невнимательный?

Кто поможет?

Заранее спасибо.

patrion
14-04-2010, 18:37
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 Если бы...но это сторонний файл, исходного кода которого у меня нету...

ViCK_kz
15-04-2010, 10:14
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)).
Но всегда при распаковке или упаковке даёт ошибку.
Дайте пожалуйста примеры батников

ChVL
15-04-2010, 20:27
В среде 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]?
Зачем все усложнять то? :)

ChVL
16-04-2010, 21:42
Sotonisto,
Дык, с этого и начинал. Обнаружил, что запись из секции в реестр не вносится, поэтому и решил попробовать через reg файлик.




© OSzone.net 2001-2012