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

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

Автор: mikutu
Дата сообщения: 09.10.2008 11:59
Спасибо. Создал с помощью мастера проект посмотрел каких строк не хватает у меня в проекте добавил и проблема с иконками решена. С запуском тоже.
Автор: tonegins
Дата сообщения: 09.10.2008 13:21
Genri


Цитата:
Page1 := CreateCustomPage(wpWelcome, 'Страница 1', 'Выбор компонентов');
Page2 := CreateCustomPage(Page1.ID, 'Страница 1', 'Компонент 1');
Page3 := CreateCustomPage(Page2.ID, 'Страница 2', 'Компонент 2');
Page4 := CreateCustomPage(Page3.ID, 'Страница 3', 'Компонент 3');
Page5 := CreateCustomPage(Page4.ID, 'Страница 4', 'Компонент 4');


Если пользователь проставил все галочки, то есть он хочет установить все компоненты, то такая последовательность задания идентификаторов прокатит, а если он не выбрал какой то компонент, например 2, то страница Page2 не создасться, а когда пользователь дойдет до создания страницы 3, то выдастся ошибка, так как страницы 2 нет, и поэтому она не может быть предшедствующей, теперь должна стать предшедствующей 1-я страница.
Я создаю страницы в зависимости от условия. А можно ли как-нибудь реализовать мою задумку. А если создать все страницы сразу в одном месте без условий, а потом скрывать их взависимости от условия? Если можно скрыть страницу то как? Что-то типа Page2.Hide; ???
Автор: Genri
Дата сообщения: 09.10.2008 13:22
tonegins

Цитата:
в функции обработчике вывожу MsgBox(IntToStr(CurPageID), mbInformation, mb_Ok);
-- а позвольте спросить, в каком обработчике? Я так подозреваю, что используются NextButtonClick и BackButtonClick. А в хелпе указано, что в этих функциях CurPageID - это текущая страница, а если Result:= True, то отображается следующая\предыдущая. Т.е. если ты находишься на Page2 с ID например 102, то при нажатии Next, получишь в сообщении 102, но страница отобразиться следующая (103). Если теперь нажмешь назад, то естественно получишь 103, а страница отобразится 102. Надеюсь понятно объяснил.
Не знаю, что ты хочешь обрабатывать, но вероятно, следует использовать CurPageChanged

procedure CurPageChanged(CurPageID: Integer);
begin
WizardForm.Caption:= IntToStr(CurPageID);
end;


Добавлено:

Цитата:
Я создаю страницы в зависимости от условия.
-- не совсем правильный подход. В подавляющем большинстве случаев, страницы следует создавать всегда. А для проверки, отображать страницу или пропускать, исползовать функцию ShouldSkipPage
Автор: tonegins
Дата сообщения: 09.10.2008 13:28
Genri
Большое спасибо за ответы, буду пробовать.

Добавлено:
Genri
Не подскажите как скопировать папку в директорию, которую выбрал пользователь, на созданной мной странице? Я не хочу использовать

Source: "D:\InstallFile\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

Хочу реализовать это программно. Не подскажите в каком направление копать?
В принципе хотелось бы использовать минимум стандартных страниц
Автор: Genri
Дата сообщения: 09.10.2008 14:18
tonegins

Цитата:
как скопировать папку в директорию
...............
Хочу реализовать это программно
-- либо смотри в хелпе описание функции FindFirst (там же есть и пример использования, но без вложенных папок). Либо поищи в теме файл SHFileOperation.iss - в нем я прописывал функцию CopyDir, которая, насколько помню, копирует с вложенными.

ЗЫ. Хотя я сторонник максимального использования штатных средств

Добавлено:
И все-таки, если не секрет, почему нельзя использовать штатные средства? Если проблема в том, что файлы должны копироваться в зависимости от условий, то есть такой параметр как Check. Так же можно использовать параметры BeforeInstall и AfterInstall. Т.е. многое проще реализовывать штатными средствами.
Автор: tonegins
Дата сообщения: 09.10.2008 14:56
Genri
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = wpSelectDir) or (PageID = wpReady) or (PageID = wpInstalling) then
Result:= True;
end;

первые два PageID = wpSelectDir и PageID = wpReady работают - страница не отображается, но PageID = wpInstalling не выполняется, то есть страница отображается и установка продолжается. Как-нибудь можно отменить установку, скажем перейти сразу на финишную страницу?? Заранее спасибо!
Автор: Genri
Дата сообщения: 09.10.2008 17:43
tonegins

Цитата:
Как-нибудь можно отменить установку, скажем перейти сразу на финишную страницу?
-- так отменить или продолжить? Какой-то странный у тебя инсталлятор получается Может тебе надо продолжить выполнение инсталлятора, но никаких файлов не копировать? Ну так не копируй. Копируй только если выполнено условие.
Сложно давать советы, когда непонятно что требуется в результате.

А ShouldSkipPage не вызывается для wpWelcome, wpPreparing и wpInstalling (см.хелп)
Автор: Diawer
Дата сообщения: 09.10.2008 18:22
Есть пару вопросов, а точнее два.

1.Я уже спрашивал, но на тот момент никто не смог помочь, а именно по вопросу – в Inno есть стандартное сообщение появляющееся, когда не удалось удалить файлы потому, что они были заняты другим приложением. Я добавляю в свой скрипт код именно этого сообщения (искусственно), когда в папке остались файлы, которые не были прописаны в аннинстале на удаление, то-есть созданные или добавленные пользователям.
Так вот когда получается так, когда появляется стандартное сообщение, то получается, что с моим их появляется два.
Как можно отключить стандартное сообщение (Деинсталляция My program завершена. Часть элементов не удалось удалить. Вы можете удалить их самостоятельно.

2. Как можно добавить небольшой рисунок (.bmp, .jpg или т.п.) на страницу, к примеру [Tasks], во многих инсталляторах программ это реализовано, но по предыдущему форуму найти это мне не удалось.


Если знаете как, то отпишитесь.
Автор: tonegins
Дата сообщения: 09.10.2008 18:23
Genri


Цитата:
Может тебе надо продолжить выполнение инсталлятора, но никаких файлов не копировать? Ну так не копируй. Копируй только если выполнено условие.


О! Это мне и надо! Можно кусок кода как не копировать или копировать если есть условие? Извиняюсь за навязчивость конечно, но увы я только первый день работаю с Inno...
Автор: Genri
Дата сообщения: 09.10.2008 19:42
tonegins -- первый день желательно потратить на изучение хелпа

Код: [no]
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[Files]
Source: "MyProg.exe"; DestDir: "{app}"; Check: MyProgCheck
Source: "MyProg.chm"; DestDir: "{app}"
Source: "Readme.txt"; DestDir: "{app}"

[Code]
function MyProgCheck(): Boolean;
begin
Result := FileExists(ExpandConstant('{src}\new.txt'));
end; [/no]
Автор: Diawer
Дата сообщения: 10.10.2008 06:08
Genri

Цитата:
И кстати, это сообщение не появляется, если в папке с программой есть файлы созданные пользователем.
, в этом случае появляется мое сообщение.


Цитата:
Сообщение появляется если деинсталлятор не смог удалить файлы созданные инсталлятором.
, а здесь в месте с моим их получается два, поэтому и хотел отключить.
Но все равно спасибо, теперь хоть знаю что его не отключить.

Подскажите по второму вопросу насчет вставки изобоажения, где можно найти решение (если это конечно обсуждалось).


Автор: Genri
Дата сообщения: 10.10.2008 08:58
Diawer

Цитата:
теперь хоть знаю что его не отключить.
-- Неверный вывод Я сказал, что не знаю как, но почти уверен что можно.

Цитата:
...а здесь в месте с моим их получается два
-- хм, тогда выходит что в этом случае лишним является твое. Можно попробовать определить "лишние" файлы в начале запуска деинсталлятора и там же вывести предупреждение пользователю.
Автор: tonegins
Дата сообщения: 10.10.2008 09:16
Genri
По Вашему примеру я сделал так чтоб файлы копировались взависимости от условия
В секции Files у меня тока один source
[Files]
Source : "D:\Installation\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: MyProgCheck

так вот, если выполнилось условие в MyProgCheck и файлы копировать не надо, то и страницу wpInstalling мне показывать не надо. Как от нее избавиться и перейти на следующую?

Еще вопрос. Если пользователь не выбрал один из компонентов, то есть копирование файлов не требуется. Как запретить стандартную установку, то есть без создания каталога, деинсталяция мне вообще не требуется. Но при этом продолжить выполнение созданных мной страниц.

Дело в том, что мои страницы это подключение к Oracle, создание схем и вкачивание дампов. И вызов двух других сторонних инсталяторов. Поэтому если не требуется копировать файлы, мне не нужно, чтобы инсталятор создавал какие-либо папки, а тем более деинсталятор.

Автор: Genri
Дата сообщения: 10.10.2008 09:31
tonegins

Цитата:
без создания каталога, деинсталяция мне вообще не требуется
-- ты все-таки для разнообразия почитай хелп (в т.ч. и описание директив секции [Setup]).

Цитата:
если выполнилось условие в MyProgCheck и файлы копировать не надо, то и страницу wpInstalling мне показывать не надо.
-- уверен? Тут варианта два: либо какие-то действия все-таки выполняются - и показывать надо; либо неверный алгоритм инсталлятора - и надо переделать. Ведь ситуация, когда при продолжении инсталляции ничего не выполняется, заведомо неправильная. Т.е. либо что-то делаем, либо отменяем. Не следует вводить пользователя в заблуждение - типа:- "У меня есть посылка для вас, только я ее вам не отдам" (C)
Может конечно речь идет о том, что вызываются сторонние программы со своими страницами и окно инсталлятора надо скрыть, но это тоже в хелпе не далеко запрятано.
Автор: Artem_Butenko
Дата сообщения: 10.10.2008 13:57
Товарищи, ещё четыре месяца назад я сделал русификатор для Inno Setup v.5.2.3 и как-то про него забыл. Русификация выполнена на 90%. Притом русификатор "безболезненно" устанавливается на Inno Setup QuickStartPack v.5.2.3. Если кому-нибудь нужно моё творение, скачать его можно здесь. Заранее извиняюсь, что залил файлы на letitbit.net, просто друго подходящего файлообменника (без заморочек и ограничений), я не знаю. В архиве Вы найдёте две версии русификатора, одна выполнена в виде патча, а другая, представляет собой собственно русифицированный файл, который нужно скопировать с заменой в корневой каталог Inno Setup v.5.2.3.
Автор: Genri
Дата сообщения: 10.10.2008 14:08
Artem_Butenko

Цитата:
друго подходящего файлообменника (без заморочек и ограничений), я не знаю.
-- http://forum.ru-board.com/topic.cgi?forum=35&bm=1&topic=9952#1
Автор: Artem_Butenko
Дата сообщения: 10.10.2008 16:13
Genri

Подскажите пожалуйста, можно ли "прикреплять" файлы небольшого объёма непосредственно на форуме? Если да, то как?
Автор: Serega0675
Дата сообщения: 10.10.2008 17:01
Здравствуйте, у меня вопрос, на который не смог найти ответа:
Как сделать так, чтобы при запуске инсталлятора, производилась автоматическая деинсталляция предыдущей версии приложения.
Автор: Genri
Дата сообщения: 10.10.2008 19:12
Artem_Butenko -- как, можешь посмотреть здесь. А можно или нельзя - это к модераторам.

Serega0675 -- если мне память не изменяет - несколько страниц назад был пример.

Автор: sergeyepishin
Дата сообщения: 10.10.2008 23:53
Выкладываю DLL-ку для работы со службами.
Функции:
ServiceStart(aMachine, aServiceName : string): boolean - запуск службы;
ServiceStop(aMachine,aServiceName : string): boolean - остановка службы;
ServicePause(aMachine,aServiceName : string): boolean - приостановка работы службы;
ServiceContinue(aMachine,aServiceName : string): boolean - возобновление работы службы;
ServiceGetStatus(sMachine, sService: PChar): DWORD - возвращает состояние службы ("работает", "остановлена", "пауза" и т.д.).
Скачать DLL можно здесь или здесь.
А здесь можно почитать про практическое применение и более подробное описание.
Автор: Serega0675
Дата сообщения: 11.10.2008 19:38
Genri
Спасибо, нашёл на 51 странице
сообщение Diawer:
______________________________________________________________________________________________________
Помогите совместить два кода [more=(1)][Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=My Program
UninstallDisplayName=My Program

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

[_Code]
var
ResultCode: Integer;
ResultStr: string;

function InitializeSetup(): Boolean;
begin
Result := True;
begin
If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1', 'DisplayName', ResultStr) then //брать из AppName
begin
If ResultStr='My Program 1.0' then //брать из UninstallDisplayName
begin
ResultStr:=RemoveQuotes(ResultStr);
if MsgBox('Setup has detected that ' + ResultStr + ' is already installed on your computer.'#13#13'You would like to remove all before continuing?', mbInformation, MB_OKCANCEL) = idCANCEL then
begin
Result := False;
end else
If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1', 'UninstallString', ResultStr) then
begin
If ResultStr <> '' then
begin
ResultStr := RemoveQuotes(ResultStr);
if not Exec(ResultStr, '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then
MsgBox('Uninstall Error. ' #13#13 '' + SysErrorMessage(ResultCode) + '.' #13#13 'Probably, uninstall files was moved, removed or renamed.', mbError, MB_OK);
end;
end;
end;
end;
end;
end; [/more] - инсталлятор определяет, что программа уже установленна, сообщение на подтверждение и запуск деинсталлятора,
[more=(2)][Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=My Program
UninstallDisplayName=My Program

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

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

[_Code]
function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload setuponly';

function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload setuponly';

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 InitializeSetup(): Boolean;
begin
If RunTask('My Program.exe', false) then
begin
if MsgBox('Программа установки обнаружила, что программа PowerOff запущена в данный момент.'#13#13'Закрыть программу и продолжить удаление?', mbInformation, mb_YesNo) = idYes then
begin
KillTask('My Program.exe');
Result := True;
end else
Exit;
end;
Result := True;
end;

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

function InitializeUninstall(): Boolean;
begin
If RunTaskA('My Program.exe', false) then
begin
if MsgBox('Программа удаления обнаружила, что программа PowerOff запущена в данный момент.'#13#13'Закрыть программу и продолжить удаление?', mbInformation, mb_YesNo) = idYes then
begin
KillTaskA('My Program.exe');
Result := True;
end else
Exit;
end;
Result := True;
end; [/more] - инсталлятор определяет, что программа запущена и предлагает выгрузить (закрыть) процесс, перед установкой и перед удалением. Когда деинсталлятор запускаешь через ярлык код (1) не участвует (всё нормально), а вот когда повторную установку при запущенной программе, то надо, что бы сначала срабатывал (1)код -нажимаем "Да", срабатывает код (2), ну а там уже появляется стандартное сообщение инстала "Вы действительно хотите удалить %1 и все компоненты программы?" (его впринципе можно убрать)
______________________________________________________________________________________________________

Так у меня возник вопрос:
Можно ли объединить эти две проверки в один код, но чтобы выгрузка работающего процесса происходила автоматически, т.е. не выдавала запросов на закрытие, а сама его закрывала?
Автор: YurCompMan2
Дата сообщения: 12.10.2008 15:01
http://forum.ru-board.com/topic.cgi?forum=5&topic=27438&start=715&limit=1&m=1#1
Обнаружил проблему. При добавлении 288 строки вылетает ошибка "runtime error (at 62:158)". Что мне делать?
Автор: serg_aka_lain
Дата сообщения: 12.10.2008 15:43
Serega0675

Цитата:
Можно ли объединить эти две проверки в один код, но чтобы выгрузка работающего процесса происходила автоматически

[more=Так можно]


[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
OutputBaseFilename=My Program
UninstallDisplayName=My Program 1.0

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

[Files]
Source: "ISTask.dll"; Flags: dontcopy;

[Code]

function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload setuponly';


var
ResultCode: Integer;
ResultStr: String;

function InitializeSetup(): Boolean;
begin
KillTask('notepad.exe');
Result := True;
begin
If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1', 'DisplayName', ResultStr) then
begin
If ResultStr='My Program 1.0' then
begin
ResultStr:=RemoveQuotes(ResultStr);
if MsgBox('Setup has detected that ' + ResultStr + ' is already installed on your computer.'#13#13'You would like to remove all before continuing?', mbInformation, MB_OKCANCEL) = idCANCEL then
begin
Result := False;
end else
If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1', 'UninstallString', ResultStr) then
begin
If ResultStr <> '' then
begin
ResultStr := RemoveQuotes(ResultStr);
if not Exec(ResultStr, '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then
MsgBox('Uninstall Error. ' #13#13 '' + SysErrorMessage(ResultCode) + '.' #13#13 'Probably, uninstall files was moved, removed or renamed.', mbError, MB_OK);
end;
end;
end;
end;
end;
end;

[/more] ... на примере закрытия блокнота, если открыт, - автоматически

Просто убить процесс можно без "ISTask.dll" - [more=так]

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
OutputBaseFilename=My Program
UninstallDisplayName=My Program 1.0

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


[Code]

var
ErrorCode, ResultCode: Integer;
ResultStr: String;

function InitializeSetup(): Boolean;
begin
Exec('taskkill', '/f /im notepad.exe', '', SW_HIDE,ewWaitUntilTerminated, ErrorCode);
Result := True;
begin
If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1', 'DisplayName', ResultStr) then
begin
If ResultStr='My Program 1.0' then
begin
ResultStr:=RemoveQuotes(ResultStr);
if MsgBox('Setup has detected that ' + ResultStr + ' is already installed on your computer.'#13#13'You would like to remove all before continuing?', mbInformation, MB_OKCANCEL) = idCANCEL then
begin
Result := False;
end else
If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1', 'UninstallString', ResultStr) then
begin
If ResultStr <> '' then
begin
ResultStr := RemoveQuotes(ResultStr);
if not Exec(ResultStr, '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then
MsgBox('Uninstall Error. ' #13#13 '' + SysErrorMessage(ResultCode) + '.' #13#13 'Probably, uninstall files was moved, removed or renamed.', mbError, MB_OK);
end;
end;
end;
end;
end;
end;


[/more]

Автор: YurCompMan2
Дата сообщения: 12.10.2008 17:38
Victor_Dobrov

http://forum.ru-board.com/topic.cgi?forum=5&topic=27438&start=715&limit=1&m=1#1 [?]
Обнаружил проблему. При добавлении 288 строки вылетает ошибка "runtime error (at 62:158)". Что мне делать?

p.s. Как продвигаются дела с интерфейсом выбора компонентов, как у NSIS?
Автор: Diawer
Дата сообщения: 12.10.2008 17:46
Как в этом [more=Коде][Setup]
AppName=MyProg
AppVerName=MyProg 1.51
DefaultDirName={pf}\MyProg
DefaultGroupName=MyProg

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

[Tasks]
Name: english; Description: Английский; GroupDescription: Выберите какой язык установить для MyProg:; Flags: exclusive
Name: russian; Description: Русский; GroupDescription: Выберите какой язык установить для MyProg:; Flags: exclusive

[Files]
Source: MyProgENG.exe; DestDir: {app}; DestName: MyProg.exe; Languages: english
Source: MyProgRUS.exe; DestDir: {app}; DestName: MyProg.exe; Languages: russian
[/more] перенести из секции [Tasks] на страницу "Выбора папки установки".
Автор: Serega0675
Дата сообщения: 12.10.2008 18:45
serg_aka_lain
СПАСИБО ОГРОМНОЕ!!! То, что надо.
Автор: serg_aka_lain
Дата сообщения: 12.10.2008 19:34
Diawer
[more=Как такой вариант]


[Setup]
AppName=MyProg
AppVerName=MyProg 1.0
DefaultDirName={pf}\MyProg
OutputDir=.

[Files]
Source: MyProgENG.exe; DestDir: {app}; DestName: MyProg.exe; Check: english;
Source: MyProgRUS.exe; DestDir: {app}; DestName: MyProg.exe; Check: russian;

[Code]

var
RadioButton1, RadioButton2: TNewRadioButton;

function russian: Boolean;
begin
Result := RadioButton1.Checked;
end;

function english: Boolean;
begin
Result := RadioButton2.Checked;
end;


procedure InitializeWizard();
var
MsgStr: TNewStaticText;
begin
MsgStr := TNewStaticText.Create(WizardForm);
with MsgStr do
begin
Top := ScaleY(130);
Left := ScaleX(3);
Width := ScaleX(400);
AutoSize := False;
Caption := 'Выберите какой язык установить для MyProg:';
Parent := WizardForm.SelectDirPage;
end;

RadioButton1 := TNewRadioButton.Create(WizardForm);
with RadioButton1 do
begin
Top := ScaleY(150);
Left := ScaleX(10);
Width := ScaleX(300);
Caption := 'Русский';
Checked := True;
Parent := WizardForm.SelectDirPage;
end;

RadioButton2 := TNewRadioButton.Create(WizardForm);
with RadioButton2 do
begin
Top := ScaleY(170);
Left := ScaleX(10);
Width := ScaleX(300);
Caption := 'Английский';
Parent := WizardForm.SelectDirPage;
end;

end;

function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo,
MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
var
S: String;
begin
S := S + MemoDirInfo + NewLine + NewLine;
S := S + 'Выберите какой язык установить для MyProg:' + NewLine;
if RadioButton1.Checked then
begin
S := S + Space + 'Русский' + NewLine;
end else
begin
S := S + Space + 'Английский' + NewLine;
end;
S := S + NewLine + NewLine;
Result := S;
end;

[/more]

Автор: Diawer
Дата сообщения: 12.10.2008 21:40
serg_aka_lain, это то, что надо, вот только суть в том, что при первом выборе языка (в самом начале) меняется язык для самого инсталлятора, а с помощью этого кода происходит копирование файлов в зависимости от того какой язык выбран, то есть если я сначала (для инсталлятора) выбираю русский, а затем в твоем коде английский, то копируется русский файл. В коде, который ты дал копирование происходит в зависимости от языка выбранного в начале (то есть для инсталлятора).
Автор: serg_aka_lain
Дата сообщения: 12.10.2008 22:31
Diawer

Цитата:
происходит копирование файлов в зависимости от того какой язык выбран

-Используй функцию "ActiveLanguage" [more=Примерно так]


[Setup]
AppName=MyProg
AppVerName=MyProg 1.0
DefaultDirName={pf}\MyProg
OutputDir=.

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

[Files]
Source: MyProgENG.exe; DestDir: {app}; DestName: MyProg.exe; Check: english;
Source: MyProgRUS.exe; DestDir: {app}; DestName: MyProg.exe; Check: russian;

[Code]

var
RadioButton1, RadioButton2: TNewRadioButton;

function russian: Boolean;
begin
Result := RadioButton1.Checked;
end;

function english: Boolean;
begin
Result := RadioButton2.Checked;
end;


procedure InitializeWizard();
var
MsgStr: TNewStaticText;
begin
MsgStr := TNewStaticText.Create(WizardForm);
with MsgStr do
begin
Top := ScaleY(130);
Left := ScaleX(3);
Width := ScaleX(400);
AutoSize := False;
Caption := 'Выберите какой язык установить для MyProg:';
Parent := WizardForm.SelectDirPage;
end;

RadioButton1 := TNewRadioButton.Create(WizardForm);
with RadioButton1 do
begin
Top := ScaleY(150);
Left := ScaleX(10);
Width := ScaleX(300);
Caption := 'Русский';

if ActiveLanguage = 'russian' then
begin
Checked := True;
end;

Parent := WizardForm.SelectDirPage;
end;

RadioButton2 := TNewRadioButton.Create(WizardForm);
with RadioButton2 do
begin
Top := ScaleY(170);
Left := ScaleX(10);
Width := ScaleX(300);
Caption := 'Английский';

if ActiveLanguage = 'english' then
begin
Checked := True;
end;

Parent := WizardForm.SelectDirPage;
end;

end;

function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo,
MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
var
S: String;
begin
S := S + MemoDirInfo + NewLine + NewLine;
S := S + 'Выберите какой язык установить для MyProg:' + NewLine;
if RadioButton1.Checked then
begin
S := S + Space + 'Русский' + NewLine;
end else
begin
S := S + Space + 'Английский' + NewLine;
end;
S := S + NewLine + NewLine;
Result := S;
end;

[/more]
Автор: Victor_Dobrov
Дата сообщения: 13.10.2008 00:49
YurCompMan2

Цитата:
http://forum.ru-board.com/topic.cgi?forum=5&topic=27438&start=715&limit=1&m=1#1
Обнаружил проблему. При добавлении 288 строки вылетает ошибка "runtime error (at 62:158)". Что мне делать?

Вопрос неясен. В этом скрипте всего 144 строки.

Цитата:
Как продвигаются дела с интерфейсом выбора компонентов, как у NSIS?

Если речь о том, чтобы сымитировать NSIS один в один, то мне это не интересно. А вот этот скрипт вскоре доработаю.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

Предыдущая тема: Презентация


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