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

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

Автор: Dimbay
Дата сообщения: 18.03.2008 11:18
Victor_Dobrov
Приветствую!
Добавил UsePreviousAppDir=false,всё равно инсталлятор по умолчанию предлагает установить мод в C:\Program Files\Rome-TotalWar, а нужно в C:\Program Files\The Creative Assembly\Rome - Total War
И ещё вопрос:
В своём скрипте хотел добиться такой последовательности:Запускается батник,который распаковывает некоторые файлы-затем заменяю распакованные файлы-потом с помощью другово батника,запаковываю эти файлы и удаляю хвосты.В скрипте в секции филес всё указал по порядку+использовал AfterInstall.Чёт не выходит...

[more=вот собственно скрипт][Setup]
AppName=Mod
AppVerName=Mod
AppPublisher=Mod Team
DefaultDirName={reg:HKLM\SOFTWARE\The Creative Assembly\Rome - Total War,InstallPath|{pf}\Rome-TotalWar}
DisableDirPage=no
DefaultGroupName=Mod
OutputDir=D:\Mod
OutputBaseFilename=Mod_Setup
Compression=lzma/ultra
SolidCompression=yes
UsePreviousAppDir=false

[Languages]
Name: english; MessagesFile: compiler:Default.isl
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: D:\Mod\data_m\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs overwritereadonly
Source: unpackmusic.bat; DestDir: {app}; AfterInstall: Unpack(); Flags: ignoreversion
Source: D:\Mod\data_unpack\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: Patch_for_Music_Mod.bat; DestDir: {app}; AfterInstall: Pack(); Flags: ignoreversion
Source: D:\Mod\data_patch\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: setup.ico; DestDir: {app}

[registry]
Root: HKLM; Subkey: "Software\Mod Team\Mod"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"; Flags: uninsdeletevalue

[Icons]
Name: {group}\{cm:UninstallProgram,Mod}; Filename: {uninstallexe}
Name: {commondesktop}\Mod; Filename: {app}\RomeTW-BI.EXE; WorkingDir: {app}; IconFilename: {app}\setup.ico; Parameters: " -nm"
Name: {group}\Mod; Filename: {app}\rometw-bi.exe; WorkingDir: {app}; IconFilename: {app}\setup.ico; IconIndex: 0; Parameters: " -nm"


[Code]
procedure Unpack();
var
ResultCode: Integer;
begin
Exec(ExpandConstant('{app}\unpackmusic.bat'), '', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
DeleteFile(ExpandConstant('{app}\unpackmusic.bat'));
end;

procedure Pack();
var
ResultCode: Integer;
begin
Exec(ExpandConstant('{app}\Patch_for_Music_Mod.bat'), '', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
DeleteFile(ExpandConstant('{app}\Patch_for_Music_Mod.bat'));
DelTree(ExpandConstant('{app}')+'\data\sounds\data', True, True, True);
end;[/more]

Добавлено:
P.S. Инсталлятор сам должен найти игру,не обязательно С:\...
Автор: chum2000
Дата сообщения: 18.03.2008 13:29
Подскажите пожалуйста, как можно определить при запуске установки момент, что программа уже устанавливалась. И если это так, то требуется изменить заголовок окна на "Обновление программы...". Спасибо.
Автор: Victor_Dobrov
Дата сообщения: 18.03.2008 14:19
Dimbay, из ключей реестра типа Reg_SZ и Reg_Expand_SZ путь считывается нормально. В батниках я не шарю.

chum2000, примерно так можно изменить заголовок окна мастера, если программа уже устанавливалась:

[Setup]
AppName=Corona Skin
AppVerName=Corona Skin
DefaultDirName={pf}\Corona Skin

[Code]
Procedure InitializeWizard; Begin
if RegKeyExists(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppName")}_is1') then
WizardForm.Caption:= 'Обновление – {#SetupSetting("AppName")}'
End;
Автор: chum2000
Дата сообщения: 18.03.2008 16:44
Victor_Dobrov
Спасибо. А как можно на экране приветствия сменить текст. А то тама "установка", а нуно обновление.
Автор: vimvim
Дата сообщения: 18.03.2008 17:54
спасибо большое
Автор: Dimbay
Дата сообщения: 18.03.2008 20:06
Victor_Dobrov
Спасибо!
Автор: Victor_Dobrov
Дата сообщения: 19.03.2008 02:00
chum2000, как можно на экране приветствия сменить текст. А то тама "установка", а нуно обновление.

Вот [more=пример.]
[Setup]
AppName=Corona Skin
AppVerName=Corona Skin 5.2.3
DefaultDirName={pf}\Corona Skin

[CustomMessages]
UpdateWelcomeLabel1=Вас приветствует мастер обновления%n%1
UpdateWelcomeLabel2=Программа обновит %1.%n%nПеред началом обновления рекомендуется закрыть работающее приложение.

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Code]
Procedure InitializeWizard; var Name: String;
Begin
Name:= '{#SetupSetting("AppName")}'
if RegKeyExists(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\' + Name + '_is1') then begin
WizardForm.Caption:= 'Обновление – ' + Name
WizardForm.WelcomeLabel1.Caption:= FmtMessage(ExpandConstant('{cm:UpdateWelcomeLabel1}'), [Name])
WizardForm.WelcomeLabel2.Caption:= FmtMessage(ExpandConstant('{cm:UpdateWelcomeLabel2}'), ['{#SetupSetting("AppVerName")}'])
end;
End;
[/more]
Автор: Caps Losk
Дата сообщения: 19.03.2008 07:42
Victor_Dobrov

Цитата:
chum2000, как можно на экране приветствия сменить текст. А то тама "установка", а нуно обновление.

Вот пример.

А можно ли изменить заголовок (при запуске инсталлятора), который появляется в "панели задач и меню пуск" - это всегда - Setup?
Автор: chum2000
Дата сообщения: 19.03.2008 12:59
Victor_Dobrov
Спасибо огромное. А где можно прочитать про все эти полюшечки. А то много где нужно исправлений делать.
Автор: Victor_Dobrov
Дата сообщения: 19.03.2008 15:34
Caps Losk, не знаю, как поменять название кнопки на панели задач, MainForm.Caption не подходит.

chum2000, Есть руководство от Kindly, сборник от fty, предыдущие части темы, справка по Inno.
Автор: Sampron
Дата сообщения: 19.03.2008 16:24
Caps Losk

[Messages]
SetupAppTitle=My Proga
Автор: Victor_Dobrov
Дата сообщения: 19.03.2008 16:31
Sampron, так название должно измениться, только если прога была установлена...
Автор: Diawer
Дата сообщения: 19.03.2008 17:20
elapse, спасибо за помощь, хорошее решение.

[INI]
Filename: {app}\config.txt; Section: Language; Key: Language; String: {language};
Автор: Sampron
Дата сообщения: 19.03.2008 17:21
Victor_Dobrov
а, понял, тогда незнаю.
Автор: Diawer
Дата сообщения: 19.03.2008 17:23
Всё отлично работает, но есть ещё вопрос
по этой теме, хотел запаковать другую программу, всё также config.txt с такой же
структурой в нём, только за смену язяка отвечает строка OtherLanguage=English.lng
(German.lng,Japanese.lng, Russian.lng), то есть указывает название языкового файла,
которые находятся в программе в папке Languages. И этот способ не катит.
Как я понял можно сокращать но не дописывать.
Автор: elapse
Дата сообщения: 19.03.2008 19:18
Diawer, честно говоря, не вижу, в чём проблема. А про

Цитата:
можно сокращать но не дописывать

не понял вообще. По-моему, решение так же просто, как и предыдущее, и отличается от него лишь парой слов / букв. [more=Подробнее]
[Setup]
AppName=My Program
AppVerName=My Program [Version]
DefaultDirName={pf}\My Program

[Languages]
Name: English; MessagesFile: compiler:Default.isl;
Name: French; MessagesFile: compiler:Languages\French.isl;
Name: German; MessagesFile: compiler:Languages\German.isl;
Name: Russian; MessagesFile: compiler:Languages\Russian.isl;
Name: Spanish; MessagesFile: compiler:Languages\Spanish.isl;

[LangOptions]
LanguageCodePage=0

[Files]
Source: config.txt; DestDir: {app};

[INI]
Filename: {app}\config.txt; Section: Language; Key: OtherLanguage; String: {language}.lng;
[/more].
Автор: Kutsenko
Дата сообщения: 19.03.2008 22:57
А можна сделать так чтобы при каждом запуске инсталятора WizardImageFile (изображение) было разное?
Автор: elapse
Дата сообщения: 19.03.2008 23:36
Kutsenko, "можна". Что-то вроде [more=такого][no]
[Setup]
AppName=My Program
AppVerName=My Program [Version]
DefaultDirName={pf}\My Program
OutputDir=.

[Code]
var
nCount: Integer;
nImage: array [0..100] of String;

function FillBMPArray(const fromDir, fileMask: String; Level: Byte): Integer;
var
FSR, DSR: TFindRec;
FindResult: Boolean;
APath: String;
MainLen: Integer;

begin
MainLen := Length(fromDir);
APath := AddBackslash(fromDir);
FindResult := FindFirst(APath + fileMask, FSR);
try    
while FindResult do
begin
if (FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0) then
begin
{Files} nImage[nCount] := APath + FSR.Name;
nCount := nCount + 1;
end;
FindResult := FindNext(FSR);
end;

FindResult := FindFirst(APath + '*.*', DSR);

while FindResult do
begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then
begin
{Recursion} FillBMPArray(APath + DSR.Name, fileMask, Level + 1);
end;
FindResult := FindNext(DSR);
end;
finally
FindClose(FSR);
FindClose(DSR);
end;
Result := nCount;
end;

procedure InitializeWizard();
begin
if (FillBMPArray(ExpandConstant('{src}\Images'), '*.BMP', 1) > 0) then
WizardForm.WizardBitmapImage.Bitmap.LoadFromFile(nImage[Random(nCount)]);
end;
[/no][/more]. Рядом с инсталлятором создаёшь папку Images, где должны находиться нужные тебе файлы изображений с расширением .bmp.
Автор: htuos
Дата сообщения: 20.03.2008 00:37
Caps Losk

Цитата:
А можно ли изменить заголовок (при запуске инсталлятора), который появляется в "панели задач и меню пуск" - это всегда - Setup?

можно, примерно [more=так][Коде]
function SetWindowText(hWnd: Longint; lpString: PChar): Longint; external 'SetWindowTextA@user32.dll stdcall';
function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';

procedure SetAppTitle(Value:string);
var
h:HWND;
begin
h:=GetWindowLong(MainForm.Handle,-8);
if h<>0 then SetWindowText(h,PChar(Value));
end;

procedure InitializeWizard;
begin
SetAppTitle('NewTitle');
end;[/more]
Автор: Caps Losk
Дата сообщения: 20.03.2008 03:14
Sampron

Цитата:
[Messages]
SetupAppTitle=My Proga

Спасибо...- просто и сердито
Автор: Diawer
Дата сообщения: 20.03.2008 08:42
elapse, действительно всё просто, не догодался, спасибо.
Автор: chum2000
Дата сообщения: 20.03.2008 11:39
Подскажите пожалуйста, вот есть такая функция IsTaskSelected - проверяет выбрана ли "задача". А как можно менять выбор програмно. Идея такая, чтобы не показывать страницу выбора, а в зависимости от условия выбирать/снимать нужные/ненужные
Автор: Forslay
Дата сообщения: 20.03.2008 16:20
Здравствуйте у меня есть такая проблема....

В моём скрипте есть такая процедура...

procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode: Integer;
begin
if CurStep = ssDone then
begin
Exec(ExpandConstant('{src}\Data\NET.Framework.exe'), '', '',
SW_SHOW, ewWaitUntilTerminated, ResultCode)
end
end;



Поясняю:

Сразу после завершения инсталляци программы, запускается инсталляции Framework'а.

А мне нужно что бы сначало пользователю вывадилось диалоговое окно, где спрашивалось бы надо устанавливать Framework или нет... Если надо то он жмёт "OK" и запускается инсталлка Framework'а, если нет, то инсталляция полностью завершается...


Заранее большое спасибо !!!!!!!!!!!!!!!!
Автор: elapse
Дата сообщения: 20.03.2008 19:35
Forslay, а в чём проблема?

Код:
procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode: Integer;
begin
if (CurStep = ssDone) and (MsgBox('Установить .NET Framework?', mbInformation, mb_YesNo) = IDYES) then
Exec(ExpandConstant('{src}\Data\NET.Framework.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
end;
Автор: serg_aka_lain
Дата сообщения: 20.03.2008 19:36
Forslay

А так пробывал ...

if MsgBox('Запустить установку NET Framework?' , MbConfirmation, Mb_OkCancel) = idok then begin ....
Автор: geranik
Дата сообщения: 20.03.2008 19:37
Forslay
В смысле да или нет, то так.
[more]
procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode: Integer;
begin
if CurStep = ssDone then
begin
if MsgBox('установить Framework?',mbconfirmation, mb_yesno) = IDYES then
begin
Exec(ExpandConstant('{src}\Data\NET.Framework.exe'), '', '',
SW_SHOW, ewWaitUntilTerminated, ResultCode)
end
else
end;
end;
[/more]
Ах, уже многие знают.
Автор: Forslay
Дата сообщения: 20.03.2008 19:47
Спасибо большое, пробывал я так как Вы предлагаете Просто протупил, ну в ту директорию файл засунул :D:D

Блин ребята спасибо за такую поддержку !!!!!!
Автор: Diawer
Дата сообщения: 21.03.2008 22:32
Подскажите, есть два файла Readme1.txt, Readme2.txt, как сделать что бы отображалось после
InfoBeforeFile=C:\readme1.txt второе такое же окно InfoBeforeFile=C:\readme2.txt.
Автор: elapse
Дата сообщения: 21.03.2008 23:01
Diawer, опять же, всё тривиально. [more=Подробнее][no]
[Setup]
AppName=My Program
AppVerName=My Program [Version]
DefaultDirName={pf}\My Program
InfoBeforeFile=readme1.txt

[Files]
Source: readme2.txt; DestDir: {tmp}; Flags: dontcopy;

[Code]
procedure InitializeWizard();
var
String: String;
begin
ExtractTemporaryFile('readme2.txt');
LoadStringFromFile(ExpandConstant('{tmp}\readme2.txt'), String);
CreateOutputMsgMemoPage(wpInfoBefore, 'New InfoBeforePage', 'Some interesting information', WizardForm.InfoBeforeClickLabel.Caption, String);
end;
[/no][/more].
Автор: Trancsend
Дата сообщения: 22.03.2008 01:23
Товарищи, как минимизировать размер инсталлятора? Исключив uninst000.exe (700кб). Нужно упаковать мелкие плагины.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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