PDA

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


Страниц : 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

Gnom_aka_Lexander
25-08-2014, 13:17
R.i.m.s.k.y., Проще :)
Pascal Scripting: WizardSilent
Прототип:
function WizardSilent: Boolean;
Описание:
Возвращает значение True, если инсталлятор запущен в тихом режиме, в обратном случае False.

Leka_651
25-08-2014, 13:25
R.i.m.s.k.y., спасибо, но данный код совсем запрещает тихую установку. а мне нужно, чтобы тихая установка прерывалась только в том случае, если после предыдущего удаления осталось файлы, которые удаляться после перезагрузки.

R.i.m.s.k.y.
25-08-2014, 13:46
Проще »
а
ну я давно это писал

Le9ent
27-08-2014, 12:05
Добрый день. Не подскажите где можно найти пример распаковки внешнего .zip -архива.
(Он будет находится рядом с установщиком {{src}} )

Нашел в Inno Setup Scripting 5.1 только распаковку .rar


[Run]
Filename: "{src}\UnRAR.exe"; WorkingDir: "{src}"; Parameters: "x -O+ archive.rar ""{app}\"""; Flags: waituntilterminated

Nordek
27-08-2014, 13:20
Le9ent, Первый вариант в первом сообщении Работа с архивами 7z (http://forum.oszone.net/post-2012750-1182.html)
Второй вариант:
[Run]
Filename: {src}\7z.exe; Parameters: "x ""{src}\Archive.7z"" -o""{app}"" * -r -y"

Кстати, совсем забыл:
Помощь (http://forum.oszone.net/faq.php) » Использование фильтров и поиска на конференции (http://forum.oszone.net/faq.php?faq=faq_filters) » Использование фильтров в качестве инструмента поиска (http://forum.oszone.net/faq.php?faq=faq_filters#faq_filter)
Помощь (http://forum.oszone.net/faq.php) » Использование фильтров и поиска на конференции (http://forum.oszone.net/faq.php?faq=faq_filters) » Поиск по конференции (http://forum.oszone.net/faq.php?faq=faq_filters#faq_search)

Переваривайте:
Поиск в:
Inno Setup [все вопросы] часть 1 (http://forum.oszone.net/search.php?do=process&searchthread=1&showposts=1&searchthreadid=60604&query=7z)
Скрипты Inno Setup. Помощь и советы [часть 2] (http://forum.oszone.net/search.php?do=process&searchthread=1&showposts=1&searchthreadid=148703&query=7z)
Скрипты Inno Setup. Помощь и советы [часть 3] (http://forum.oszone.net/search.php?do=process&searchthread=1&showposts=1&searchthreadid=190621&query=7z)
Скрипты Inno Setup. Помощь и советы [часть 4] (http://forum.oszone.net/search.php?do=process&searchthread=1&showposts=1&searchthreadid=218969&query=7z)
Скрипты Inno Setup. Помощь и советы [часть 5] (http://forum.oszone.net/search.php?do=process&searchthread=1&showposts=1&searchthreadid=235078&query=7z)
Скрипты Inno Setup. Помощь и советы [часть 6] (http://forum.oszone.net/search.php?do=process&searchthread=1&showposts=1&searchthreadid=257328&query=7z)
Скрипты Inno Setup. Помощь и советы [часть 7] (http://forum.oszone.net/search.php?do=process&searchthread=1&showposts=1&searchthreadid=278998&query=7z)
Автоматическая установка приложений (http://forum.oszone.net/search.php?do=process&query=7z&exactname=1&showposts=1&forumchoice%5B%5D=61)

Leka_651
28-08-2014, 12:20
Нашла решение своей проблемы:

Добрый день!
Такая задачка: если при удалении программы какие-то файлы были заняты, то по завершению будет выдано сообщение о перезагрузке. Если комп не перезагружать, и сразу в этот же каталог поставить программу, то инсталлятор выдаст сообщение, что сначала необходимо перезагрузить комп. Но если инсталлятор запустить в тихом режиме, то комп сразу начинает перезагружать. Как сделать так, чтобы при тихой установке инсталлятор просто завершал свою работу, ничего не установив. »

все оказалось очень просто:

Prototype:
function RmSessionStarted: Boolean;

Description:
Возвращает True, если была начата сессия Restart Manager, иначе False.

вдруг кому-то пригодится)

palsn2000
30-08-2014, 20:11
Если кто знает помогите решить следующую проблему:
В конце установки программы нужно запустить *.bat файл и дождаться окончания выполнения cmd перед выполнением следующего действия.

bat файл запускаю в секции [RUN] в итоге Инно Сетап добросовестно делает секундную паузу при запуске батника, но не реагирует на запускаемую им операцию с командной строкой.

В итоге получаю страницу завершения инсталлятора с предложением на запуск установленной программы, в то время, как еще выполняются действия над файлами в ранее запущенной командной строке.

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

R.i.m.s.k.y.
30-08-2014, 22:10
palsn2000, флаг waituntilterminated стоит?

palsn2000
31-08-2014, 10:09
R.i.m.s.k.y., Большое спасибо! Всё работает как надо!

Мой косяк - недостаточно внимательно читал справку ведь предельно ясно написано By default, when the shellexec flag is used it will not wait until the spawned process terminates. If you need that, you must add the flag waituntilterminated.

Как говорится в пословице: Век живи - Век учись

Извините за беспокойство :blush:

saneksanek
31-08-2014, 19:33
Здравствуйте,помогите пожалуйста.Из примеров взял код на Logo.
Но загвоздка в том что он не до конца рабочий,иными словам компиляция и установка проходит успешно,но вот когда начинаю производить деинсталляцию выбивает ошибку "Runtime Error(at 60:286) Could not call proc" а следом и еще одна "Runtime Error(at 63:5) Could not call proc"
Сам код с файлами: https://yadi.sk/d/DfdvFSZtak4NJ

Dodakaedr
31-08-2014, 19:57
saneksanek,
[Files]
Source: Dll\b2p.dll; DestDir:{app}; Flags: dontcopy;
Source: Dll\botva2.dll; DestDir:{app}; Flags: dontcopy;
Source: Dll\ISDone.dll; DestDir:{app}; Flags: dontcopy;
Source: InstallFiles\Logo 3.png; DestDir:{app}; Flags: dontcopy;

Проблема в флаге dontcopy что означает не копировать, а при деинсталляции вы те файлы вызываете и получается ошибка так как они отсутствуют.

#include "Mod\botva22.iss"
[Setup]
AppName=Game
AppVerName=Game
DefaultDirName={pf}\Game
OutputDir=.

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[Files]
Source: Dll\b2p.dll; DestDir:{app}; Attribs: hidden system; Flags: ignoreversion;
Source: Dll\botva2.dll; DestDir:{app}; Attribs: hidden system; Flags: ignoreversion;
Source: Dll\ISDone.dll; DestDir:{app}; Attribs: hidden system; Flags: ignoreversion;
Source: InstallFiles\Logo 3.png; DestDir:{app}; Attribs: hidden system; Flags: ignoreversion;

[Code]
var
CreateLogo: Longint;
ResultCode: Integer;

function InitializeSetup:boolean;
begin
if not FileExists(ExpandConstant('{tmp}\b2p.dll')) then ExtractTemporaryFile('b2p.dll');
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
Result:=True;
end;

procedure LogoLabelOnClick(Sender: TObject);
begin
ShellExec('open', 'http://krinkels.org/showthread.php?t=901&page=2', '', '', SW_SHOWNORMAL, ewNoWait, ResultCode)
end;

procedure InitializeWizard;
begin
ExtractTemporaryFile('Logo 3.png')
CreateLogo:= ImgLoad(WizardForm.handle, ExpandConstant('{tmp}\Logo 3.png'), ScaleX(5), ScaleY(325), ScaleX(170), ScaleY(34), True, True);
ImgApplyChanges(WizardForm.Handle);

with TLabel.Create(WizardForm) do begin
Parent:=WizardForm;
AutoSize:=False;
Transparent:= true;
SetBounds(ScaleX(5), ScaleY(325), ScaleX(170), ScaleY(34));
OnClick:=@LogoLabelOnClick;
Cursor:= CrHand;
end;
end;

procedure DeinitializeSetup();
begin
gdipShutdown;
end;


function InitializeUninstall: Boolean;
begin
FileCopy(ExpandConstant('{app}\b2p.dll'), ExpandConstant('{tmp}\b2p.dll'), False);
FileCopy(ExpandConstant('{app}\botva2.dll'), ExpandConstant('{tmp}\botva2.dll'), False);
FileCopy(ExpandConstant('{app}\Logo 3.png'), ExpandConstant('{tmp}\Logo 3.png'), False);
Result := True;
end;

procedure UnLogoLabelOnClick(Sender: TObject);
begin
ShellExec('open', 'http://krinkels.org/showthread.php?t=901&page=2', '', '', SW_SHOWNORMAL, ewNoWait, ResultCode)
end;

procedure InitializeUninstallProgressForm;
begin
CreateLogo:= ImgLoad(UninstallProgressForm.Handle, ExpandConstant('{tmp}\Logo 3.png'), ScaleX(5), ScaleY(325), ScaleX(170), ScaleY(34), True, True);
ImgApplyChanges(UninstallProgressForm.Handle);

with TLabel.Create(nil) do
begin
Parent:=UninstallProgressForm;
AutoSize:=False;
Transparent:= true;
SetBounds(ScaleX(5), ScaleY(325), ScaleX(170), ScaleY(34));
OnClick:=@UnLogoLabelOnClick;
Cursor:= CrHand;
end;
end;

procedure DeinitializeUninstall();
begin
gdipShutdown;
end;

saneksanek
31-08-2014, 20:19
Dodakaedr, Точно,спасибо.

Tco 03
02-09-2014, 02:41
Здравствуйте, господа.
Кому не сложно, подскажите, пожалуйста. Застрял на реализации следующей вещи:
SetIniString('Client', 'Size', GetIniString('Client', 'Size', '', ExpandConstant('{tmp}\Info.ini')), ExpandConstant('{app}\Info.ini'));
Нужно с двух разных файлов (с разных секций (из папки {tmp})) вписать в один файл (в одну секцию (в папку {app})) размер файла. То есть, в первом файле, допустим, размер 1287 байт, а в другом 2154 байта. Как их приплюсовать в одну секцию? То есть, чтобы в файле в папке {app} размер был 3441 байт, но только в одной секции?
Спасибо за внимание.

nik1967
02-09-2014, 10:55
Tco 03, SetIniString('Client', 'Size', IntToStr(StrToInt(GetIniString('Client', 'Size', '', ExpandConstant('{tmp}\Info1.ini'))) + StrToInt(GetIniString('Client', 'Size', '', ExpandConstant('{tmp}\Info2.ini')))), ExpandConstant('{app}\Info.ini'));

[code]
[процедура или функция, где все происходит]
var
S,S1,S2: String;
begin
S1:= GetIniString('Client', 'Size', '', ExpandConstant('{tmp}\Info1.ini')); // получаем 1 значение
S2:= GetIniString('Client', 'Size', '', ExpandConstant('{tmp}\Info2.ini')); // получаем 2 значение
S:= IntToStr(StrToInt(S1) + StrToInt(S2)); // переводим 1 и 2 значение в цифру, суммируем их, переводим сумму снова в строчку
SetIniString('Client', 'Size', S, ExpandConstant('{app}\Info.ini')); // записываем результат в .ini файл
end;

Tco 03
02-09-2014, 18:47
nik1967, работает как Швейцарские часы, благодарю!

Есть ещё одна проблема, господа. Как вписать значение в реестр через секцию Code? Знаю как вписать просто значение, цыфры:
RegWriteDWordValue(HKLM, 'SOFTWARE\Sapatcom\Client Interface, 'Skin', 3);
Как вписать цифры такого формата: 1.0.1.2 (то есть вписать цифры с точками)? И как вписать в реестр просто слово? И ещё... Как потом одно из значений реестра вписать в .ini-файл?

nik1967
02-09-2014, 19:41
RegWriteDWordValue »
А ты точно уверен, что ключ реестра должен быть DWord? Может быть String (строковый параметр)?
Тогда так:RegWriteStringValue(HKLM, 'SOFTWARE\Sapatcom\Client Interface', 'Skin', '1.0.1.2');
И как вписать в реестр просто слово? »Так же.
И ещё... Как потом одно из значений реестра вписать в .ini-файл? »
Получаешь значение с помощью функции RegGetValueNames, затем записываешь значение в .ini файл.

Dodakaedr
03-09-2014, 14:02
Подскажите пожалуйста, кто понимает, как можно осуществить вот такое:
AfterInstall: "DoServiceInstall('{app}\DfSdkS.exe', 'DfSdkS', 'Defragmentation-Service', 'Defrag Service - powered by mst software')"; а именно DoServiceInstall.

{app}\DfSdkS.exe - программа
DfSdkS - я так понимаю что это ключ
Defragmentation-Service - имя
Defrag Service - powered by mst software - описание

kotyarko@fb
03-09-2014, 16:25
Всем привет!
Не подскажете, можно-ли привязать PopupMenu к одному из чекбоксов в ComponentsList? (чекбоксы созданы стандартно, через [Components]).

kotyarko@fb
03-09-2014, 16:44
Подскажите пожалуйста, кто понимает, как можно осуществить вот такое »
AfterInstall: DoServiceInstall;

[Сode]
Procedure DoServiceInstall();
begin
ShellExec(параметры функции посмотри в справке);
end;
Не знаю, это ли тебе нужно. Но параметры запуска программы указать можно (вряд ли можно указать ключ к ней).

Dodakaedr
03-09-2014, 17:14
Не знаю, это ли тебе нужно. Но параметры запуска программы указать можно (вряд ли можно указать ключ к ней). »
ключ тоже можно. Нет не это. Я думаю что надо что-то типа такого:
procedure DoServiceInstall(параметры);
begin
//Код процедуры;
end;
В программировании не очень, поэтому не могу придумать.




© OSzone.net 2001-2012