Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: ChVL
Дата сообщения: 26.03.2008 20:15
geranik
Спасибо! Это то, что надо.
Автор: Genri
Дата сообщения: 26.03.2008 20:27
Diawer -- в принципе elapse уже ответил. Только вопрос, что ты подразумеваешь под "панелью инструментов"? Панель задач? Тогда опять вопрос - там тоже надо менять или нет ? В общем случае, примерно [more=так]
Код:
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program

[Files]
Source: ISTask.dll; DestDir: {app}

[Languages]
Name: "en"; MessagesFile: "compiler:Default.isl"
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"

[Messages]
ru.UninstallAppTitle=Удаление - My Program
ru.UninstallAppFullTitle=Удаление — %1

[CustomMessages]
en.CloseApp=Program is running! Close program and continue?
ru.CloseApp=Программа запущена! Закрыть программу и продолжить?

[Code]
const
MB_ICONINFORMATION = $40;
MB_ICONEXCLAMATION = $30;
MB_ICONQUESTION = $20;
MB_ICONSTOP = $10;
MB_ICONNONE = $0;


function KillTaskA(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';

function RunTaskA(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';

function MessageBox(hWnd: Integer; lpText, lpCaption: string; uType: Cardinal): Integer;
external 'MessageBoxA@user32.dll stdcall';


procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
begin
UnloadDLL(ExpandConstant('{app}\ISTask.dll'));
end;
end;

procedure InitializeUninstallProgressForm();
begin
if RunTaskA('calc.exe', false) then
if MessageBox(UninstallProgressForm.Handle,
CustomMessage('CloseApp'),
UninstallProgressForm.Caption ,
MB_ICONINFORMATION or MB_YESNO) = IDYES then
KillTaskA('calc.exe')
else
Abort;
end;
Автор: Chanka
Дата сообщения: 26.03.2008 21:34
Подскажите, пожалуйста, как записать это в код:

[Messages]
SetupAppTitle=Установка

У меня WindowsVisible=no
Автор: Raf_SE
Дата сообщения: 26.03.2008 23:42
Можно ли какнить сделать так, чтобы под выбором имени папки в меню "Пуск" можно было выбрать галочку "Не создавать директорию в меню Пуск"? Ну и естественно адресная строка бы отключалась, т.е. в ней нельзя было чтото изменить.
Имею введу это меню:
Автор: Unc1e
Дата сообщения: 27.03.2008 00:47
Raf_SE, AllowNoIcons=yes
Автор: htuos
Дата сообщения: 27.03.2008 01:24
Chanka
уже писали на 55 стр.

да и здесь

Цитата:
Corona Skin & Check System Requirements ... Если программа уже установлена, название окна и кнопки на панели задач меняются на 'Обновление'.

видимо пример имеется
Автор: Chanka
Дата сообщения: 27.03.2008 08:33
htuos

Премного благодарен
Автор: ZABXOZ
Дата сообщения: 27.03.2008 14:00
Извините что повторяюсь., но я немного изменил вопрос

Уважаемые, есть несколько вопросов по сабжу..
Подскажите, собирает ли Inno Setup инсталяторы больше 2х гигабайт..?
Просто столкнулся с такой проблемой в программе Install Creator Pro, там этого сделать не возможно =(

Помогите плз, нужен код, в той же самой Install Creator Pro
можно было задать парметры запуска нескольким исполняемым файлам при завершении инсталяции..
Надо что бы по окончанию инсталяции запустить без подвтерждения пользователя (можно и с подтверждением)*.bat файл и по окончанию установки предложить запуск установленного приложения..

Пробывал тупо вставлять код в секцию [Run]
Пример:
[Run]
Filename: "{app}\setup.bat"; Description: "{cm:LaunchProgram,SETUP }"; Flags: shellexec postinstall skipifsilent
Filename: "{app}\play C&C3KW.bat"; Description: "{cm:LaunchProgram,Запустить C&C3KW }"; Flags: shellexec postinstall skipifsilent

оба приложения запускаются одновременно, а это не есть хорошо, потому что play C&C3KW.bat, появляеться в директории только после запуска setup.bat

Спасибо
Автор: Genri
Дата сообщения: 27.03.2008 14:55
ZABXOZ
1. Inno Setup Help - Setup Script Sections - [Setup] section - DiskSpanning
2. Inno Setup Help - Setup Script Sections - [Run] section - Flags - waituntilterminated
3. Inno Setup Help - Pascal Scripting - Event Functions - procedure CurStepChanged(CurStep: TSetupStep);

Для начала так. Более точно посоветовать сложно, так как не совсем понятно, что делает setup.bat кроме создания C&C3KW.bat; надо или нет запрашивать подтверждение на его запуск; почему нельзя объединить два батника в один.
Автор: ZABXOZ
Дата сообщения: 27.03.2008 15:06
Genri
Спасибо за отклик на зов страждуещего..
Ситуация такая, setup.bat запускает установку visual basic приложения(точно могу сказать позже так сейчас на работе) и кидает файлы в директорию в том числе и C&C3KW.bat с параметрами запуска, и самоликвидируется. вот такая песня =)

надо или нет запрашивать подтверждение на его запуск?
надо!
Автор: Genri
Дата сообщения: 27.03.2008 15:49
ZABXOZ

Цитата:
setup.bat запускает установку visual basic приложения
-- я так понял, что инсталлятор инсталлирует какой-то софт. Для этого софта необходима инсталляция какого-то "visual basic приложения". Так если "visual basic приложение" необходимо - тогда почему бы его не ставить штатными средствами, а не через setup.bat ? А если "visual basic приложение" ставится опционально, почему бы не использовать [Components] ?
Ну и в конце концов, в нужное время можно вывести запрос (function MsgBox(const Text: String; const Typ: TMsgBoxType; const Buttons: Integer): Integer;) и в зависимости от ответа пользователя не запускать или запускать setup.bat (function Exec(const Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ResultCode: Integer): Boolean;)
Автор: gar
Дата сообщения: 27.03.2008 15:53
Помогите, плиз, примерчиком.
Мне надо написать скрипт, который установит мою прогу(несколько файлов) и драйвер USB устройства.
Автор: Raf_SE
Дата сообщения: 27.03.2008 17:30
Как сделать чтобы когда DefaultGroupName находил в реестре нужное значение, то он бы дописывал в конец (к примеру) "\Mods\Anti-Balance".

Пробывал так, но ничего не вышло:
Код: DefaultGroupName={reg:HKLM\SOFTWARE\Blizzard Entertainment\Diablo II,StartMenuName\Mods\Anti-Balance|Diablo II\Mods\Anti-Balance}
Автор: Chanka
Дата сообщения: 27.03.2008 17:39
Как убрать иконку с инсталлятора и кнопки свернуть развернуть оставить надо только Х закрыть. Помогите, пожалуйста
Автор: Diawer
Дата сообщения: 27.03.2008 18:44
Genri

Огромное спасибо, в самую точку, то, что надо.
Всё, что хотел спросил и начал паковать но нарисовался ещё вопрос, компилирую и IS ругаеться
на эту часть [more=кода][Files]
Source: WhatsNew.txt; DestDir: {app}

procedure InitializeWizard();
var
String: String;
begin
if ExpandConstant('{language}') = 'Russian' then
begin
ExtractTemporaryFile('WhatsNew.txt');
LoadStringFromFile(ExpandConstant('WhatsNew.txt'), String);
CreateOutputMsgMemoPage(wpInfoBefore, 'Информация', 'Пожалуйста, прочитайте следующую важную информацию перед тем, как продолжить.', WizardForm.InfoBeforeClickLabel.Caption, String);
end;
end;

procedure InitializeWizard();
var
TextLabel : TNewStaticText;
begin
TextLabel := TNewStaticText.Create(WizardForm);
TextLabel.Left := ScaleX(3);
TextLabel.Top := ScaleY(345);
TextLabel.Caption := 'by Diawer';
TextLabel.Parent := WizardForm;
TextLabel.Font.Color := clBlack;
TextLabel.Font.Color := clSilver;
end;[/more], а именно на двойную "InitializeWizard()", пробовал соединить, но почему то не
получаеться, подскажите, что не так.
Автор: Genri
Дата сообщения: 27.03.2008 19:13
Diawer -- две процедуры с одним именем быть не могут. Либо [more=переноси]
Код:
procedure InitializeWizard();
var
String: String;
TextLabel : TNewStaticText;
begin
if ExpandConstant('{language}') = 'Russian' then
begin
ExtractTemporaryFile('WhatsNew.txt');
LoadStringFromFile(ExpandConstant('WhatsNew.txt'), String);
CreateOutputMsgMemoPage(wpInfoBefore, 'Информация', 'Пожалуйста, прочитайте следующую важную информацию перед тем, как продолжить.', WizardForm.InfoBeforeClickLabel.Caption, String);
end;
TextLabel := TNewStaticText.Create(WizardForm);
TextLabel.Left := ScaleX(3);
TextLabel.Top := ScaleY(345);
TextLabel.Caption := 'by Diawer';
TextLabel.Parent := WizardForm;
TextLabel.Font.Color := clBlack;
TextLabel.Font.Color := clSilver;
end;
Автор: elapse
Дата сообщения: 27.03.2008 19:14
Chanka

Код:
procedure InitializeWizard();
begin
WizardForm.BorderStyle := bsDialog;
end;
Автор: Dimbay
Дата сообщения: 27.03.2008 19:21
Genri

Приветствую!
У меня в инстале 2 бат файла.
Как во время инстала увидеть происходящий процесс?(дос окно).
Автор: geranik
Дата сообщения: 27.03.2008 19:31
Raf_SE
Есть версия через код, только там меню пуск-авто, потом содержание реестра и добавление нужных слов. Пример: [more]
[setup]
DefaultGroupName={code:GetTDPath2}\Mods\Anti-Balance

[code]
function GetTDPath2(Param: String): String;
var f:string;
begin
RegQueryStringValue(HKLM, 'SOFTWARE\Blizzard Entertainment\Diablo II','StartMenuName', f);
result:=ExtractFileDir(f);
end;
[/more]
добавлено
У меня значение вставляет какое видит, а если нету, то пока не придумал...
Автор: Genri
Дата сообщения: 27.03.2008 19:44
Dimbay -- насколько я понимаю, речь идет о файлах, запускаемых через функцию Exec. Замени ф ней параметр SW_HIDE на SW_SHOW
hint! Эти и другие константы можно посмотреть в хелпе в конце раздела Pascal Scripting: Support Functions Reference
Автор: Raf_SE
Дата сообщения: 27.03.2008 19:53
geranik
Чет не пашет. Не вставляет значение ключа "StartMenuName". И кстати, желательно чтобы если инсталлятор ключа не находит, то вписывал бы к примеру - "Diablo II" (по твоему скрипту инсталлятор пишет только "\Mods\Anti-Balance" даже когда ключ есть)
Автор: elapse
Дата сообщения: 27.03.2008 20:03
Raf_SE

Цитата:
{reg:HKLM\SOFTWARE\Blizzard Entertainment\Diablo II,StartMenuName\Mods\Anti-Balance|Diablo II\Mods\Anti-Balance}

Это твой код, а это пример из руководства:

Код: {reg:HKxx\SubkeyName,ValueName|DefaultValue}
Автор: Genri
Дата сообщения: 27.03.2008 20:06
Dimbay -- и еще:
1. если надо чтобы консоль после отработки батника не закрывалась, добавь в конец батника строку с командой pause. Тогда можно все спокойно прочитать и закрыть нажатием любой клавиши.
2. В ISTask.dll я в свое время встраивал функцию, которая возвращает результат работы консольного приложения:
function ExecConsoleAppX(CommandLine: PChar): PChar;
external 'ExecConsoleAppX@files:ISTask.dll stdcall';
Если использовать ее, то окно консоли показывать нет необходимости (результат можно отобразить в месседжбоксе или на странице самого инсталлятора. ИМХО это более цивилизованно, чем "черный квадрат" консоли
Автор: Raf_SE
Дата сообщения: 27.03.2008 20:18
elapse
Если честно, то разницы не вижу.

Код: Root: HKLM; Subkey: "SOFTWARE\Blizzard Entertainment\Diablo II"; ValueName: "StartMenuName"; ValueType: String; ValueData: "{groupname}";
Автор: elapse
Дата сообщения: 27.03.2008 20:32
Raf_SE
Вообще-то я попросил кусок реестра, потому что не уверен точно, что надо, чтоб выводилось. Ну да ладно:
{reg:HKLM\SOFTWARE\Blizzard Entertainment\Diablo II,StartMenuName|Diablo II\Mods\Anti-Balance}
Это должно выводить значение StartMenuName, если такой параметр/ключ есть, в противном случае - "Diablo II\Mods\Anti-Balance". Так?
Автор: Raf_SE
Дата сообщения: 27.03.2008 20:36
elapse
Не совсем, мне нужно чтобы к значению "StartMenuName" добавлялась строчка "\Mods\Anti-Balance", а если ключ StartMenuName не находило, то писало бы "Diablo II\Mods\Anti-Balance".

P.S.
В идеале, StartMenuName = "Diablo II" хотя может быть и "Diablo II - Lord of Destruction" или чтото ветом роде.
Автор: elapse
Дата сообщения: 27.03.2008 20:40
В принципе, спросил, потому что geranik уже почти всё объяснил и непонятно, что не получается. [more=Подробнее]
[Setup]
DefaultGroupName={code:GetPath}

[Код]
function GetPath(Param: String): String;
var
String: String;
begin
RegQueryStringValue(HKLM, 'SOFTWARE\Blizzard Entertainment\Diablo II', 'StartMenuName', String);
if String <> '' then
String := String + '\Mods\Anti-Balance'
else
String := 'Diablo II\Mods\Anti-Balance';
Result := String;
end;
[/more]
Автор: geranik
Дата сообщения: 27.03.2008 20:41
Raf_SE
Вот, готово. Должен найти ключ и от результата вписывать значения.
[more]

[Setup]

AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
OutputBaseFilename=setup
DefaultGroupName={code:GetTDPath2}

[code]

function GetTDPath2(Param: String): String;
var f:string;
begin
//ищет есть ли ключ
if RegvalueExists(HKLM, 'SOFTWARE\Blizzard Entertainment\Diablo II','StartMenuName') then
begin
//если есть,то содержание+...
RegQueryStringValue(HKLM, 'SOFTWARE\Blizzard Entertainment\Diablo II','StartMenuName', f );
result:=f+'\Mods\Anti-Balance';// \ - в начале по обстоятельству
end else
begin
//если нет, то этот текст например
result:='Diablo II';
end;
end;
[icons]
Name: "\gen"; Filename: "{uninstallexe}"

[/more]
Да f это странная вещь была.
Автор: Raf_SE
Дата сообщения: 27.03.2008 20:44
elapse
О! Вот твой код работает! Спасибо.

geranik
А твой почемуто упорно не хочет вставлять значение ключа StartMenuName. Ну в принципе уже не нужно
Автор: elapse
Дата сообщения: 27.03.2008 20:52
Raf_SE
Замени в коде geranikа ExtractFileDir(f) на f - результат будет одинаков.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Поиск в WinDjView


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.