Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 9]
serg5,
[CustomMessages]
CreateStartMenuIcon=Создать ярлык(и) в меню «Пуск»
[Tasks]
Name: "startmenuicon"; Description: "{cm:CreateStartMenuIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Вы поясните какие программы хотите запихнуть в свой установщик?
Подозреваю что хотите запихнуть стационарную и портативную.
А вообще то для ярлыков есть секция [Icons]
Создать проверочную функцию и подставить к ярлыкам программы для которой нужно устанавливать ярлыки.
И секцию [Icons] покажите. »
[Icons]
Name: "{autodesktop}\{#MyAppName_1}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
Name: "{autoprograms}\{#MyAppName_1}"; Filename: "{app}\{#MyAppExeName}"; Tasks: startmenuicon
с {group} и {commondesktop} вместо {autodesktop}; {autoprograms} ошибки
Вы поясните какие программы хотите запихнуть в свой установщик?
Подозреваю что хотите запихнуть стационарную и портативную. »
Да.
serg5,
Я так сразу и подозревал, только для этих целей думаю надо отказаться от секции [Tasks], а создать костомную страницу и уже на ней размещать все ваши хотелки, так как кроме стандартных ярлыков захотите что то ещё разместить.
Выбор установки стандартной версии или распаковки портативной версии на какой то стандартной странице будет смотреться не очень. Переупаковщики программ делают на отдельной кастомной странице. RePack (& Portable) by версий программ в сети валом, присмотритесь и определитесь для себя.
Я так сразу и подозревал, только для этих целей думаю надо отказаться от секции [Tasks], а создать костомную страницу и уже на ней размещать все ваши хотелки, так как кроме стандартных ярлыков захотите что то ещё разместить.
Выбор установки стандартной версии или распаковки портативной версии на какой то стандартной странице будет смотреться не очень. Переупаковщики программ делают на отдельной кастомной странице. RePack (& Portable) by версий программ в сети валом, присмотритесь и определитесь для себя. »
Т.е. на стандартной странице без выбора создания ярлыка в меню Пуск,(чтобы по умолчанию),секции [CustomMessages]не получится? Как и применение без этого "Check: IsChecked".
Ещё вопрос "Требуемое место на диске" как прописать для двух программ по отдельности соответственно, без разделения на компоненты, и типы установки т.е. полная,минимальная и т.д.?
Vanadiy777
07-07-2022, 14:20
Ещё вопрос "Требуемое место на диске" как прописать для двух программ по отдельности соответственно, без разделения на компоненты, и типы установки т.е. полная,минимальная и т.д.? »
serg5,
Сейчас вообще не понятно... Откуда у Вас компоненты взялись?
Вы, или полностью свой скрипт дайте, чтобы было понятно, или мат. часть учите...
Никто Вашу идею не украдет здесь, а додумывать, что Вы там хотите реализовать - удовольствие так себе...
А как хорошо все начиналось:
Скрипт для двух .exe в одном инсталляторе.
Чтобы можно было выбирать какую программу устанавливать.
Может кто подскажет ? »
Или аппетит приходит во время еды?
Извините, ничего личного.
Т.е. на стандартной странице без выбора создания ярлыка в меню Пуск,(чтобы по умолчанию),секции [CustomMessages]не получится? Как и применение без этого "Check: IsChecked".
Ну почему же не получится, получиться, просто я написал потому что в дальнейшем вам захочется ещё какой то чекбокс разместить, а места уже не будет хватать на странице.
Check: IsChecked это проверочная функция, IsChecked - это внутреннее название функции, оно может быть любое (по английски).
Можно и без неё, но ярлыки будут устанавливаться и при распаковке портативной программы, а это не к чему.
Ну почему же не получится, получиться, просто я написал потому что в дальнейшем вам захочется ещё какой то чекбокс разместить, а места уже не будет хватать на странице.
Check: IsChecked это проверочная функция, IsChecked - это внутреннее название функции, оно может быть любое (по английски).
Можно и без неё, но ярлыки будут устанавливаться и при распаковке портативной программы, а это не к чему. »
А как в вашем коде прописать данные для "Требуемое место на диске" для двух программ по отдельности соответственно ?
И если вернуться к вопросу "Как сделать ярлык в меню пуск,без выбора создания ярлыка в меню Пуск,(чтобы по умолчанию) создавался,только для одной программы?
Вы, или полностью свой скрипт дайте, чтобы было понятно, или мат. часть учите... »
#define MyAppName_1 "Программа 1"
#define MyAppName_2 "Программа 2"
[Setup]
AppName=My Program
AppVerName=My Program v 1.7
DefaultDirName={pf}\Программа 1
OutputDir=.
[Files]
Source: compiler:Examples\MyProg1.exe; DestDir: {app}; Check: IsChecked_1; Flags: ignoreversion;
Source: compiler:Examples\MyProg2.exe; DestDir: {app}; Check: IsChecked_2; Flags: ignoreversion;
[Code__]
var
Check: array [0..1] of TCheckBox;
procedure Check0(Sender: TObject);
begin
if Check[0].Checked then
begin
Check[1].Checked := False;
end;
if (Check[0].Checked = False) and (Check[1].Checked = False) then Check[0].Checked := True;
if Check[0].Checked then WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{pf}')) + '{#MyAppName_1}';
end;
procedure Check1(Sender: TObject);
begin
if Check[1].Checked then
begin
Check[0].Checked := False;
end;
if (Check[0].Checked = False) and (Check[1].Checked = False) then Check[1].Checked := True;
if Check[1].Checked then WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{sd}')) + '{#MyAppName_2}';
end;
//--------------------------------------------------\\
function IsChecked_1: boolean;
begin
Result:= Check[0].Checked;
end;
//--------------------------------------------------\\
function IsChecked_2: boolean;
begin
Result:= Check[1].Checked;
end;
//--------------------------------------------------\\
procedure InitializeWizard();
begin
Check[0] := TCheckBox.Create(WizardForm);
with Check[0] do
begin
Parent := WizardForm.SelectDirPage;
Checked := True;
Top := ScaleY(120);
OnClick := @Check0;
Caption := 'Программа 1';
end;
Check[1] := TCheckBox.Create(WizardForm);
with Check[1] do
begin
Parent := WizardForm.SelectDirPage;
Top := ScaleY(150);
OnClick := @Check1;
Caption := 'Программа 2';
end;
end;
Или аппетит приходит во время еды? »
Просто люди реально знают, а не банальные флудеры.
Да и другим будет познавательно.
Пример (https://www.upload.ee/files/14303323/Example-3.iss.html)
А как в вашем коде прописать данные для "Требуемое место на диске" для двух программ по отдельности соответственно ?
Я никогда этого не делал, потому что для переупаковки программ не считаю нужным, не такие уж ёмкие программы. Для переупаковки игрушек, там да(несколько гигов). Ну всё на любителя, как говориться о вкусах не спорят. Примеров на форумах много.
Vanadiy777
07-07-2022, 15:09
serg5,
Зачем Вы даете скрипт, который предоставил коллега ZVSRus? Я его уже видел...
Свой скрипт весь давайте, с [Tasks], [Icons] и т.д.
Vanadiy777
10-07-2022, 20:57
Коллеги, подскажите пожалуйста...
Не могу понять, как надо прописать...
Паскаль не знаю от слова - абсолютно...
Надо запустить regedit с параметрами:
Exec(ExpandConstant('{win}\regedit.exe'), ' /S ''{app}\MyRegOff.reg''', '', SW_HIDE, ewWaitUntilTerminated, LResultCode);
Так не работает...
Как правильно параметры прописать?
Пните, пожалуйста, в нужном направлении
Vanadiy777,
Путь в одинарных кавычках не прокатит, нужны двойные:"{app}\MyRegOff.reg"
Vanadiy777
10-07-2022, 22:13
Путь в одинарных кавычках не прокатит, нужны двойные: »
iglezz,
Так тоже пробовал - не работает...
Может тоже "ExpandConstant" в путях нужна до рег-файла?
Но как прописать не могу понять - пишет "ошибка синтаксиса"...
Vanadiy777,
Ну да, ExpandConstant нужен, раз константы присутствуют.Exec(ExpandConstant('{win}\regedit.exe'), '/S '+ExpandConstant('"{app}\MyRegOff.reg"'), '', SW_HIDE, ewWaitUntilTerminated, LResultCode);
Может у кого-то было ,при прописке создания иконки в меню пуск, предлагает (Default),вместо имени при инсталляции.
Name: "{group}\{#MyAppDisplayName}"; Filename: "{app}\{#MyAppExeName}"; MinVersion: 0.0,5.0; Check: PuskIconCheck and InstallerCheck;
Name: "{group}\Удалить {#MyAppDisplayName}"; Filename: "{uninstallexe}"; MinVersion: 0.0,5.0; Check: PuskIconCheck and InstallerCheck;
Name: "{commondesktop}\{#MyAppDisplayName}"; Filename: "{app}\{#MyAppExeName}"; MinVersion: 0.0,5.0; Check: DesktopIconCheck and InstallerCheck;
В частности при попытке упаковать два .exe (стационарную и portable версии) в один инсталлятор.При инсталяции обычной версии пишет (Default) вместо имени.При распаковке портабл тоже предлагает сделать иконку в меню пуск с этим же именем (Default),хотя здесь он вообще не должен этого предлагать.Check работает нормально на установку файлов, а с иконками что-то не так...
Весь код:
#define MyAppName "Моя стационарная программа"
#define MyAppNamePortable "Моя программа Portable"
#define MyAppExeName "MyProg1.exe"
#define MyAppDisplayName "MyProg1"
#define MyAppDirName "Моя стационарная программа"
#define MyAppConstantName "{pf}"
[Setup]
AppName={#MyAppName}
AppVerName=1.7
DefaultDirName={code:GetInstallDir|{#MyAppConstantName}\{#MyAppDirName}}
OutputDir=.
Uninstallable=not PortableCheck
DisableDirPage=no
DisableWelcomePage=no
UsePreviousAppDir=no
[Icons]
Name: "{group}\{#MyAppDisplayName}"; Filename: "{app}\{#MyAppExeName}"; MinVersion: 0.0,5.0; Check: PuskIconCheck and InstallerCheck;
Name: "{group}\Удалить {#MyAppDisplayName}"; Filename: "{uninstallexe}"; MinVersion: 0.0,5.0; Check: PuskIconCheck and InstallerCheck;
Name: "{commondesktop}\{#MyAppDisplayName}"; Filename: "{app}\{#MyAppExeName}"; MinVersion: 0.0,5.0; Check: DesktopIconCheck and InstallerCheck;
[Files]
Source: compiler:Examples\MyProg1.exe; DestDir: {app}; Check: InstallerCheck; Flags: ignoreversion;
Source: compiler:Examples\MyProg2.exe; DestDir: {app}; Check: PortableCheck; Flags: ignoreversion;
[Code ]
var
ComponentPage: TWizardPage;
InstallerGroupBox: TNewGroupBox;
Installer: TNewRadioButton;
Portable: TNewRadioButton;
IconGroupBox: TNewGroupBox;
PuskIcon: TNewCheckBox;
DesktopIcon: TNewCheckBox;
PanelZadash: TNewCheckBox;
function CheckParam(s: string): boolean;
var
i: integer;
begin
for i := 0 to ParamCount do begin
Result := ParamStr(i) = s;
if Result then Break;
end;
end;
//--------------------------------------------------------//
function GetInstallDir(S: String): String;
begin
if CheckParam('/P') then
Result:= ExpandConstant('{src}\{#MyAppNamePortable}')
else
Result:= ExpandConstant(S);
end;
function InstallerCheck: Boolean;
begin
Result := Installer.Checked or CheckParam('/I');
end;
//--------------------------------------------------------//
function PortableCheck: Boolean;
begin
Result := Portable.Checked or CheckParam('/P');
end;
function DesktopIconCheck: Boolean;
begin
Result:= DesktopIcon.Checked;
end;
//--------------------------------------------------------//
function PuskIconCheck: Boolean;
begin
Result:= PuskIcon.Checked;
end;
//--------------------------------------------------------//
function PanelZadashCheck: Boolean;
begin
Result:= PanelZadash.Checked;
end;
procedure CompClick(Sender: TObject);
begin
case TNewRadioButton(Sender) of
Portable:
begin
//--------------------------------------------------------//
DesktopIcon.Checked := False;
DesktopIcon.Enabled := DesktopIcon.Checked;
PuskIcon.Checked := False;
PuskIcon.Enabled := PuskIcon.Checked;
PanelZadash.Checked := False;
PanelZadash.Enabled := PanelZadash.Checked;
//--------------------------------------------------------//
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + '{#MyAppNamePortable}';
WizardForm.Caption := FmtMessage(ExpandConstant('Распаковка — %1'), [ExpandConstant('Моя программа Portable')]);
end;
Installer:
begin
//--------------------------------------------------------//
DesktopIcon.Checked := True;
DesktopIcon.Enabled := DesktopIcon.Checked;
PuskIcon.Checked := True;
PuskIcon.Enabled := PuskIcon.Checked;
PanelZadash.Checked := False;
PanelZadash.Enabled := True;
//--------------------------------------------------------//
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{#MyAppConstantName}')) + '{#MyAppDirName}';
WizardForm.Caption := FmtMessage(SetupMessage(msgSetupWindowTitle), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
end;
end;
procedure InitializeWizard();
begin
ComponentPage := CreateCustomPage(wpUserInfo, 'Выбор типа установки', '. . .');
WizardForm.DirEdit.Text:= ExpandConstant('{code:GetInstallDir|{#MyAppConstantName}\{#MyAppDirName}}');
InstallerGroupBox := TNewGroupBox.Create(WizardForm);
with InstallerGroupBox do
begin
Parent := ComponentPage.Surface;
Left := ScaleX(0);
Top := ScaleY(10);
Width := ScaleX(210);
Height := ScaleY(60);
Caption := 'Тип установки:';
end;
Portable := TNewRadioButton.Create(WizardForm);
with Portable do
begin
Parent := InstallerGroupBox;
Left := ScaleX(10);
Top := ScaleY(35);
Width := ScaleX(210);
Height := ScaleY(17);
Caption := 'Распаковка портативной версии';
Checked := CheckParam('/P');
OnClick := @CompClick;
end;
IconGroupBox := TNewGroupBox.Create(WizardForm);
with IconGroupBox do
begin
Parent := ComponentPage.Surface;
Left := ScaleX(0);
Top := ScaleY(80);
Width := ScaleX(210);
Height := ScaleY(80);
Caption := 'Ярлыки программы:';
end;
PuskIcon := TNewCheckBox.Create(WizardForm);
with PuskIcon do
begin
Parent := IconGroupBox;
Left := ScaleX(10);
Top := ScaleY(15);
Width := ScaleX(210);
Height := ScaleY(17);
Caption := 'Ярлык(и) в меню «Пуск»';
Checked := True;
State := cbChecked;
end;
DesktopIcon := TNewCheckBox.Create(WizardForm);
with DesktopIcon do
begin
Parent := IconGroupBox;
Left := ScaleX(10);
Top := ScaleY(35);
Width := ScaleX(210);
Height := ScaleY(17);
Caption := 'Ярлык(и) на «Рабочем столе»';
Checked := True;
State := cbChecked;
end;
PanelZadash := TNewCheckBox.Create(WizardForm);
with PanelZadash do
begin
Parent := IconGroupBox;
Left := ScaleX(10);
Top := ScaleY(55);
Width := ScaleX(210);
Height := ScaleY(17);
Caption := 'Закрепить ярлык в «Панели задач»';
end;
Installer := TNewRadioButton.Create(WizardForm);
with Installer do
begin
Parent := InstallerGroupBox;
Left := ScaleX(10);
Top := ScaleY(15);
Width := ScaleX(210);
Height := ScaleY(17);
Caption := 'Установка стационарной версии';
Checked := not CheckParam('/P');
OnClick := @CompClick;
end;
end;
Пробовал другой подобный код..тоже самое. С одним .exe нормально.
В чём может быть причина..
[Setup]
DefaultGroupName={#MyAppName}
[Setup]
DefaultGroupName={#MyAppName} »
хорошо.
только при выборе распаковки портабл версии всё также предлагает иконку в меню пуск...
как её оттуда убрать..
Может надо как-то Check по другому указывать?
Или в таком случае аргумента какого-то не хватает?
serg5,
У вас в секции [Setup] включена страница DefaultGroupName={#MyAppName} (страница программной группы), если для вас показ этой страницы не принципиально то можно эту страницу пропустить.
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = 8) then
Result:= True;
end;
Тогда страница программной группы показываться не будет, ни при выборе портативной версии, ни при стационарной версии.
Если же хотите при выборе стационарной версии хотите показывать эту страницу, тогда надо химичить, все компоненты программной группы перенести на страницу SelectDirPage, пример в справке есть.
На странице SelectDirPage создаёте панельку и все компоненты с странице SelectProgramGroupPage переносите на эту панельку SelectDirPage, а в процедуре procedure CurPageChanged(CurPageID: Integer); при включеном Portable: скрываете, а при Installer: показываете.
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = 8) then
Result:= True;
end; »
Не показывается,да.
Только в portable её не должно быть вообще.
Так как там не нужны ярлыки.
А она пытается и в portable ярлык повесить...
Здесь что-то..?.
Потому я писал выше может быть с Check что-не так?
Или ещё какой-то задачи не хватает?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.