Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 9]
можно так: »
#define AppVerName "Русское название программы 1.0"
#define AppVerName1 "English Name Programs 1.0"
[Setup]
AppName=Test
AppVername=Test
DefaultDirName={pf}\Test
DisableWelcomePage=False
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl;
Name: eng; MessagesFile: compiler:Default.isl;
[Code]
procedure InitializeWizard();
begin
with WizardForm do begin
case ActiveLanguage of
'rus': Caption:= '{#AppVerName}';
'eng': Caption:= '{#AppVerName1}';
end;
end;
end;
Vanadiy777
18-12-2022, 17:58
nik1967,
так даже прикольней... :)
Vanadiy777, nik1967, Спасибо!
По первому вопросу вариант от Vanadiy777 подошел. Проще получилось и кучу дублей ru и en из секции [Icons] убрал. Нагородил я там огород)
По второму вопросу вариант от nik1967 подошел.
Но у меня вот так сработало:
begin
with WizardForm do begin
case ActiveLanguage of
'ru': Caption:= ExpandConstant('{cm:AppName} ') + '{#AppVer}';
'en': Caption:= ExpandConstant('{cm:AppName} ') + '{#AppVer}';
end;
end;
end;
Не знаю правильно-неправильно, но работает)
Vanadiy777
18-12-2022, 19:51
Не знаю правильно-неправильно, но работает) »
DA-Bro,
если разработает, то значит правильно...
У Вас там очень сложный скрипт...
В процедуру InitializeWizard(); и так много всего добавлено...
Я бы, честно говоря, лучше бы через через [Messages] сделал бы...
Но, если работает, тогда все нормально...
Vanadiy777, да есть ещё нестыковки со скриптом.
И вот это объединить не знаю как.
procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged1(CurPageID);
CurPageChanged2(CurPageID);
end;
Vanadiy777
18-12-2022, 20:18
DA-Bro,
Я помню Вашу просьбу, и занимаюсь этим вопросом...
Просто сами понимаете - выходные... :wink:
Vanadiy777, да я не тороплюсь. Понимаю конечно. Я там уже кучу изменений сделал. Даже теперь и не знаю.
Если может самое новое что есть Вам скинуть. Я там ещё ковыряюсь.
Что-то нахожу интересное, пробую добавлять. Смотрю, работает не работает, надо не надо или на потом оставить)
DA-Bro
Описали бы все свои загвоздки разом, давно бы уже многое решили.
Vanadiy777
19-12-2022, 11:50
Если может самое новое что есть Вам скинуть. Я там ещё ковыряюсь.
Что-то нахожу интересное, пробую добавлять. Смотрю, работает не работает, надо не надо или на потом оставить) »
DA-Bro,
Тогда пока ничего не трогаю... Как закончите эксперименты, скиньте в личку, пожалуйста... :)
Всех с наступающим!
Подскажите пожалуйста. Такой вопрос:
Как сделать так, чтобы при нахождении Программа.exe
в C:\Program Files (x86)\Программа туда копировались файлы в папку C:\Program Files (x86)\Программа\Папка
а если Программа.exe находится в C:\Program Files\Программа , то файлы копировались в C:\Program Files\Программа\Папка
И второй вопрос:
Как можно прикрутить кнопку пониже выбора пути установки, чтобы можно было переключать путь с "Program Files (x86)" на "Program Files" и наоборот.
Как можно прикрутить кнопку пониже выбора пути установки, чтобы можно было переключать путь с "Program Files (x86)" на "Program Files" и наоборот.
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputDir=.
[Code**]
var
Button: TNewButton;
Flag: Boolean;
procedure HideShow(Sender: TObject);
begin
if not Flag then begin
Button.Caption:='x86';
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{pf64}')) + 'My Application';
Flag:= True;
end else begin
Button.Caption:='x64';
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{pf32}')) + 'My Application';
Flag:= False;
end;
end;
procedure InitializeWizard();
begin
Button := TNewButton.Create(WizardForm);
with Button do
begin
Parent := WizardForm.SelectDirPage;
SetBounds(ScaleX(342),ScaleY(120),ScaleX(75),ScaleY(23));
Caption := 'x64';
OnClick := @HideShow
end;
end;
Но так и не понял логику вопроса.
Но так и не понял логику вопроса. »
Здравствуйте! Вот что нужно:
Папку с шаблонами нужно скопировать в папку с программой.
Если установщик находит программу (если она установлена) в "Program Files (x86)" то копирует файлы туда, а если программа находится в "Program Files" то по этому пути.
Если программа не установлена то по идее нужно чтобы появилось сообщение об этом или просто остался путь по умолчанию.
Тут речь идёт не об установки программы а шаблонов в эту программу. Соответственно и "Program.exe" нет в установщике, не указан.
Тут речь идёт не об установки программы а шаблонов в эту программу.
Тогда всё понятно. Думаю что предыдущий пример вам просто не нужен. Ищем в реестре куда установлена программа (в pf32 или pf64) и установщик автоматом устанавливает дополнения.
Если программы нет, тогда выдаётся сообщение что программа не найдена, кнопка OK и ничего не происходит.
[Setup]
AppName=GetDeviceInfo
AppVerName=GetDeviceInfo
DefaultDirName={code:GetInstallDir}\My Papka
OutputDir=.
Uninstallable=no
[Code**]
function GetInstallDir( AppID: String ): String; var dir: String;
begin
if not RegQueryStringValue(HKLM, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\My Application_is1', 'InstallLocation', dir) then
RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Application_is1', 'InstallLocation', dir);
Result:= dir;
end;
function InitializeSetup(): Boolean;
begin
Result:= True;
if not RegKeyExists(HKLM, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\My Application_is1') then
begin
if not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Application_is1') then
begin
MsgBox('Программа не найдена!', mberror, mb_ok);
Result:=False;
end;
end;
end;
Тестируй в паре с предыдущим примером
inyourspace
03-01-2023, 17:41
Всем привет. Подскажите, пожалуйста: требуется, чтобы после установки программы, на рабочем столе в автоматическом режиме создавался ярлык (без права выбора пользователем - создавать его, или нет), и чтобы в этом ярлыке, в поле "Объект", автоматом были прописаны нужные параметры запуска. К примеру: "путь_установки\исполняемый_файл.exe" -параметр запуска 1 -параметр запуска 2
Не могу разобраться, как это сделать.
Vanadiy777
03-01-2023, 18:12
inyourspace,
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=.
[Files]
Source: "MyProg.exe"; DestDir: "{app}"
[Icons]
Name: "{commondesktop}\My Program"; Filename: "{app}\MyProg.exe"; Parameters: "-параметр запуска 1 -параметр запуска 2";
inyourspace
03-01-2023, 23:31
Еще одна проблемка. При подсовывании InfoBeforeFile файла компилятору в txt формате, по итогу в инсталляторе вместо кириллицы в нем кракозябры. Из-за чего может так быть?
Vanadiy777
04-01-2023, 11:41
Из-за чего может так быть? »
inyourspace,
компилятор, видимо, не понимает кодировку, в которой сохранен txt.
Попробуйте сохранить txt-файл в другой кодировке.
vetal_the_great@vk
05-01-2023, 18:09
Приветствую.
Возможно здесь где-то есть ответ, но я сейчас с телефона и искать крайне сложно.
Пожалуйста, подскажите или дайте ссылку на информацию о том, как сделать выборочную распаковку архивов.
К примеру:
Data1.bin нужно установить однозначно.
Затем или Data2.bin, или Data3.bin, что зависит от выбора пользователя. Установить оба архива невозможно.
Далее установить Data4.bin и Data5.bin, или какой-то один из этих архивов, или вовсе ни одного.
Заранее спасибо.
Пожалуйста, подскажите или дайте ссылку на информацию о том, как сделать выборочную распаковку архивов.
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputDir=.
[Languages]
Name: "EN"; MessagesFile: "compiler:Languages\English.isl"
Name: "RU"; MessagesFile: "compiler:Languages\Russian.isl"
[CustomMessages]
EN.ComponentsName1=Install Data1.bin
EN.ComponentsName1_1=Install Data2.bin
EN.ComponentsName1_2=Install Data3.bin
EN.ComponentsName2=Install Data4.bin
EN.ComponentsName3=Install Data5.bin
RU.ComponentsName1=Установить Data1.bin
RU.ComponentsName1_1=Установить Data2.bin
RU.ComponentsName1_2=Установить Data3.bin
RU.ComponentsName2=Установить Data4.bin
RU.ComponentsName3=Установить Data5.bin
[Components]
Name: Data1; Description: {cm:ComponentsName1}; Types: Full Compact Custom; Flags: fixed
Name: Data1\Data2; Description: {cm:ComponentsName1_1}; Types: Full; Flags: exclusive
Name: Data1\Data3; Description: {cm:ComponentsName1_2}; Types: Compact; Flags: exclusive
Name: Data4; Description: {cm:ComponentsName2}; Types: Full;
Name: Data5; Description: {cm:ComponentsName3}; Types: Full;
[Files]
Source: "Data1.txt"; DestDir: "{app}"; Components: Data1; Flags: ignoreversion
Source: "Data2.txt"; DestDir: "{app}"; Components: Data1\Data2; Flags: ignoreversion
Source: "Data3.txt"; DestDir: "{app}"; Components: Data1\Data3; Flags: ignoreversion
Source: "Data4.txt"; DestDir: "{app}"; Components: Data4; Flags: ignoreversion
Source: "Data5.txt"; DestDir: "{app}"; Components: Data5; Flags: ignoreversion
vetal_the_great@vk
06-01-2023, 12:11
Спасибо за ответ, но, похоже, что примерно таким способом я и делаю. Минус этого в том, что inno setup засовывает файлы непосредственно в setup.exe, увеличивая его размер. При установке он просто засовывает нераспакованные архивы в папку. Да, можно указать, чтобы установщик эти архивы распечатал, но размер setup.exe от этого не уменьшится. Поэтому я хочу сделать так, чтобы при выборе архива А он распаковывался, а архив Б оставался нетронутым, не засовывался ни в какие папки.
Вот тут идет распаковка:
if not ISArcExtract ( 0, 100, ExpandConstant('{src}\data.bin'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
Вот какие строчки надо добавить, чтобы установщик, ссылаясь к выбранным компонентам, распаковывал соответствующие архивы, находящиеся в одной папке с setup.exe.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC