1. Уважаемые гости и пользователи форума.
    Администрация настоятельно рекомендует не регистрировать несколько аккаунтов для одного пользователя. При выявлении наличия мультиаккаунтов будут заблокированы все учетные записи данного пользователя.
    Аккаунты, зарегистрированные на временную почту будут также заблокированы.

Вопрос Как создать свои ключи командной строки?

Тема в разделе "Inno Setup", создана пользователем Хамик, 19 апр 2014.

  1. Пользователь

    Регистрация:
    27 мар 2014
    Сообщения:
    353
    Симпатии:
    77
    Пол:
    Мужской
    Shegorat, Спасибо! Работает как требуется!
     
  2. Пользователь

    Регистрация:
    16 мар 2015
    Сообщения:
    89
    Симпатии:
    23
    Пол:
    Мужской
    Вопрос ко всем кто пользуется командной строкой!
    В примере
    [Setup]
    AppName=My Application
    AppVersion=1.5
    DefaultDirName={code:GetInstallDir|{pf}\My Application}
    DisableProgramGroupPage=yes
    Uninstallable=not PortableCheck
    OutputDir=.

    [Files]
    Source: "MyProg - installer.exe"; DestDir: "{app}"; Flags: ignoreversion; Check: InstallerCheck;
    Source: "MyProg - portable.exe"; DestDir: "{app}"; Flags: ignoreversion; Check: PortableCheck;

    [Icons]
    Name: "{commondesktop}\My Application"; Filename: "{app}\MyProg - installer.exe"; Check: InstallerCheck;
    Код (Text):
    1.  
    2. var
    3. Portable,Installer: TNewRadioButton;
    4.  
    5. function CheckParam(s: string): boolean;
    6. var
    7. i: integer;
    8. begin
    9. for i := 0 to ParamCount do begin
    10. Result := ParamStr(i) = s;
    11. if Result then Break;
    12. end;
    13. end;
    14.  
    15. function GetInstallDir(S: String): String;
    16. begin
    17. if CheckParam('/P') then
    18. Result:= ExpandConstant('{userdesktop}\My Application Portable')
    19. else
    20. Result:= ExpandConstant(S);
    21. end;
    22.  
    23. function PortableCheck: Boolean;
    24. begin
    25. Result := Portable.Checked or CheckParam('/P');
    26. end;
    27.  
    28. function InstallerCheck: Boolean;
    29. begin
    30. Result := Installer.Checked or CheckParam('/I');
    31. end;
    32.  
    33. procedure InitializeWizard();
    34. begin
    35. WizardForm.DirEdit.Text:= ExpandConstant('{code:GetInstallDir|{pf}\My Application}');
    36.  
    37. Portable := TNewRadioButton.Create(WizardForm);
    38. with Portable do
    39. begin
    40. Parent := WizardForm.SelectDirPage;
    41. Left := ScaleX(110);
    42. Top := ScaleY(175);
    43. Width := ScaleX(100);
    44. Height := ScaleY(17);
    45. Caption := 'Портативная';
    46. Checked := CheckParam('/P');
    47. end;
    48.  
    49. Installer := TNewRadioButton.Create(WizardForm);
    50. with Installer do
    51. begin
    52. Parent := WizardForm.SelectDirPage;
    53. Left := ScaleX(0);
    54. Top := ScaleY(175);
    55. Width := ScaleX(100);
    56. Height := ScaleY(17);
    57. Caption := 'Стационарная';
    58. Checked := not CheckParam('/P');
    59. end;
    60. end;
    61.  
    В том виде в каком он есть, код работает хорошо. Тихая установка, и Тихая распаковка происходит в соответствующие папки.
    Но только когда прикручиваю к основному скрипту, на тихой распаковке выдаёт такую ошибку.
    Что означает данная ошибка?[​IMG]
     

    Вложения:

    Последнее редактирование: 24 авг 2016
  3. Пользователь

    Регистрация:
    27 мар 2014
    Сообщения:
    353
    Симпатии:
    77
    Пол:
    Мужской
    ZVSRus, это значить что что-то вызывается раньше его создания.
     
    Nemko нравится это.
  4. Пользователь

    Регистрация:
    27 мар 2014
    Сообщения:
    353
    Симпатии:
    77
    Пол:
    Мужской
    Shegorat, в ходе тестов и экспериментов оказалось, что если указать название папки типа такого рода
    Код (Text):
    1. setup.exe /VERYSILENT /D="D:\Пробная Директория Portable dir"
    , то меняется как-бы кодировка (не знаю как это можно назвать) больших кириллических букв. Получается такое: 9999.png . Но если использовать все маленькие буквы кириллици, то все норм: 888.png . Подскажите, как можно исправить этот баг?
     
    Последнее редактирование: 28 авг 2016
  5. Пользователь

    Регистрация:
    16 мар 2015
    Сообщения:
    89
    Симпатии:
    23
    Пол:
    Мужской
    Хамик, это значить что что-то вызывается раньше его создания.
    Суть ответа не понятна, что вызывается раньше, и раньше чего?.
     
  6. Пользователь

    Регистрация:
    27 мар 2014
    Сообщения:
    353
    Симпатии:
    77
    Пол:
    Мужской
    ZVSRus, что угодно: функция, процедура, загрузка изображения, условие выполнения, инициализация установщика и т.д.
     
  7. Пользователь

    Регистрация:
    16 мар 2015
    Сообщения:
    89
    Симпатии:
    23
    Пол:
    Мужской
    Хамик, что угодно: функция, процедура, загрузка изображения, условие выполнения, инициализация установщика и т.д.
    Тогда такой вопрос: Куда нужно вставить этот кусок кода?, и после каких функций и процедур стоит у вас.
    PS. С одним разобрался. Было до безобразия просто.
    Checked := CheckParam('/P'); стоя ниже OnClick := @CompClick;
    поставил наоборот все заработало.
    Возник другой вопрос, при тихой распаковке портативная версия распаковывается по своему адрусу {src} но также устанавливается и обычная версия в Program Files но уже без деинстоллятора.
     
    Последнее редактирование: 28 авг 2016
  8. Пользователь

    Регистрация:
    16 мар 2015
    Сообщения:
    89
    Симпатии:
    23
    Пол:
    Мужской
    Что нужно дописать в коде при таких командный файлах:
    "Setup.exe" /VERYSILENT /I /RU
    "Setup.exe" /VERYSILENT /I /EN
    "Setup.exe" /VERYSILENT /P
     
    Последнее редактирование: 2 сен 2016
  9. Пользователь

    Регистрация:
    16 мар 2015
    Сообщения:
    89
    Симпатии:
    23
    Пол:
    Мужской
    Перепробовал все примеры! При тихой распаковке, обычная версия как устанавливалась так и устанавливается. Может кто подскажет, что к чему?
     
  10. Пользователь

    Регистрация:
    27 мар 2014
    Сообщения:
    353
    Симпатии:
    77
    Пол:
    Мужской
    Убрать ключ /I. Делать проверку только на /P
     
  11. Пользователь

    Регистрация:
    16 мар 2015
    Сообщения:
    89
    Симпатии:
    23
    Пол:
    Мужской
    Хамик Убрать ключ /I. Делать проверку только на /P
    С тихой установкой и тихой распаковкой вроде разобрался, также разобрался с не созданием ярлыков.
    Осталось с:
    "Setup.exe" /VERYSILENT /I /RU
    "Setup.exe" /VERYSILENT /I /EN,
    в данной теме ни каких вариантов!
    Решение найдено.
    Последняя загвоздка
    с прописыванием пути "setup.exe" /VERYSILENT /P /D="D:\MyPortable". Пример в данной теме не реагирует на данный путь.
    Может не реагирует потому что в скрипте используется
    (Result:= ExpandConstant('{src}\MyApplicationPortable')
     
    Последнее редактирование: 5 сен 2016
  12. Пользователь

    Регистрация:
    16 мар 2015
    Сообщения:
    89
    Симпатии:
    23
    Пол:
    Мужской
    Что нужно изменить или дописать в данной функции для командного файла на закрепление ярлыка на панели задач для тихой установки. Чекбокс не отмечен

     
  13. Ветеран Проверенный

    Регистрация:
    18 июн 2011
    Сообщения:
    909
    Симпатии:
    673
    Привет всем у меня такая проблема не знаю как исправить я добавил ключи установки Ru En а на радио батон добавил Ru.Checked := True; в сам Inno setup работает нормально но если делать через батник установку английской версий то и русская тоже устанавливается можно как нибудь исключить через ключ исключить его
    #define MyAppName "VirtualDub"
    #define MyAppVersion "5.0.7.39"
    #define MyAppExeName "Veedub64.exe"

    [Setup]
    AppName={#MyAppName}
    AppVersion={#MyAppVersion}
    DefaultDirName={code:GetInstallDir|{pf}\{#MyAppName}}
    DefaultGroupName={#MyAppName}
    DirExistsWarning=no
    ArchitecturesAllowed=x86 x64
    ArchitecturesInstallIn64BitMode=x64
    //==============================================================//
    SolidCompression=yes
    Compression=lzma/ultra64
    InternalCompressLevel=Ultra64
    LZMABlockSize=262144
    LZMADictionarySize=65536
    LZMAMatchFinder=BT
    LZMANumFastBytes=273
    MergeDuplicateFiles=yes
    //==============================================================//
    Uninstallable=not PortableCheck
    CreateUninstallRegKey=not PortableCheck

    //==============================================================//
    [Files]
    Source: "InstallFiles\*"; Flags: dontcopy;
    ;Source: "VirtualDub\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Check:InstallerCheck;
    ;Source: "VirtualDubPortable\*"; DestDir: "{commondesktop}\VirtualDubPortable"; Flags: ignoreversion recursesubdirs createallsubdirs;Check: PortableCheck;

    Source: C:\Users\Vitaly\Desktop\111\Veedub64eng.exe; DestDir: {app}; Check: InstallerCheck and Eng;
    Source: C:\Users\Vitaly\Desktop\111\Veedub64rus.exe; DestDir: {app}; Check: InstallerCheck and Rus;
    Source: C:\Users\Vitaly\Desktop\111\Veedub64engportable.exe; DestDir: {userdesktop}\VirtualDub Portable; Check: PortableCheck and Eng;
    Source: C:\Users\Vitaly\Desktop\111\Veedub64rusportable.exe; DestDir: {userdesktop}\VirtualDub Portable; Check: PortableCheck and Rus;

    //==============================================================//
    [Icons]
    Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" ; Check:InstallerCheck and GroupIconsCheck;
    Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"; Check:InstallerCheck and GroupIconsCheck;
    Name: "{commondesktop}\Ярлык(и) на «Рабочем столе"; Filename: "{app}\{#MyAppExeName}"; WorkingDir: {app}; Check:InstallerCheck and DesktopIconsCheck;
    ;Name: "{commondesktop}\Ярлыки в меню «Пуск»"; Filename: "{app}\{#MyAppExeName}"; Check:InstallerCheck and GroupIconsCheck;
    ;Name: "{commondesktop}\Ярлык в панели задач"; Filename: "{app}\{#MyAppExeName}"; Check:InstallerCheck and TaskBarIconsCheck;
    ;Name: "{commondesktop}\Закрепить в меню «Пуск»"; Filename: "{app}\{#MyAppExeName}"; Check:InstallerCheck and StartMenuIconsCheck;


    [code_]
    //==============================================================//
    #include "Modules\botva2.iss"
    //==============================================================//
    var
    ComponentsPage: TWizardPage;
    InstallerAndPortable, Icons,Lang: TNewGroupBox;
    Installer,Portable,En,Ru: TNewRadioButton;
    DesktopIcons,GroupIcons,TaskBarIcons,StartMenuIcons: TNewCheckBox;
    InstallerPanel,PortablePanel: TPanel;
    InstallerImage,PortableImage: Longint;

    //==============================================================//
    function InitializeSetup(): Boolean;
    begin
    if not FileExists(ExpandConstant('{tmp}\b2p.dll')) then ExtractTemporaryFile('b2p.dll');
    if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
    if not FileExists(ExpandConstant('{tmp}\Installer.png')) then ExtractTemporaryFile('Installer.png');
    if not FileExists(ExpandConstant('{tmp}\Portable.png')) then ExtractTemporaryFile('Portable.png');
    Result := True;
    end;
    //==============================================================//
    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('{userdesktop}\VirtualDub Portable')
    else
    Result:= ExpandConstant(S);
    end;
    //==============================================================//
    function PortableCheck: Boolean;
    begin
    Result := Portable.Checked or CheckParam('/P');
    end;
    //==============================================================//
    function InstallerCheck: Boolean;
    begin
    Result := Installer.Checked or CheckParam('/I');
    end;
    //==============================================================//
    function DesktopIconsCheck: Boolean;
    begin
    Result:= DesktopIcons.Checked;
    end;
    //==============================================================//
    function GroupIconsCheck: Boolean;
    begin
    Result:= GroupIcons.Checked;
    end;
    //==============================================================//
    function TaskBarIconsCheck: Boolean;
    begin
    Result:= TaskBarIcons.Checked;
    end;
    //==============================================================//
    function StartMenuIconsCheck: Boolean;
    begin
    Result:= StartMenuIcons.Checked;
    end;
    //==============================================================//
    function Eng: Boolean;
    begin
    Result := (En.Checked and not CheckParam('/Ru')) or CheckParam('/En'));
    end;
    //==============================================================//
    function Rus: Boolean;
    begin
    Result := (Ru.Checked and not CheckParam('/En')) or (CheckParam('/Ru'));
    end;
    //==============================================================//

    procedure CopmpClick(Sender: TObject);
    begin
    case TNewRadioButton(Sender) of
    Installer:
    begin
    DesktopIcons.Checked:=True;
    DesktopIcons.Enabled:= DesktopIcons.Checked;
    GroupIcons.Checked:=True;
    GroupIcons.Enabled:= GroupIcons.Checked;
    PortablePanel.Hide;
    TaskBarIcons.Checked:=False;
    TaskBarIcons.Enabled:= True;
    StartMenuIcons.Checked:=False;
    StartMenuIcons.Enabled:= True;
    WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{pf}')) + '{#MyAppName}';
    end;
    Portable:
    begin
    PortablePanel.Show;
    DesktopIcons.Checked:=False;
    DesktopIcons.Enabled:= DesktopIcons.Checked;
    GroupIcons.Checked:=False;
    GroupIcons.Enabled:= GroupIcons.Checked;
    TaskBarIcons.Checked:=False;
    TaskBarIcons.Enabled:= TaskBarIcons.Checked;
    StartMenuIcons.Checked:=False;
    StartMenuIcons.Enabled:= StartMenuIcons.Checked;
    WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{userdesktop}')) + '{#MyAppName} Portable';
    end;
    end;
    end;
    //==============================================================//
    procedure InitializeWizard();
    begin
    //==============================================================//
    ComponentsPage:= CreateCustomPage(wpWelcome, 'Выбор компонентов', 'Какие компоненты должны быть установлены?');
    //==============================================================//
    InstallerAndPortable:=TNewGroupBox.Create(WizardForm);
    InstallerAndPortable.Parent := ComponentsPage.Surface;
    InstallerAndPortable.Left := ScaleX(10);
    InstallerAndPortable.Top := ScaleY(10);
    InstallerAndPortable.Width := ScaleX(205);
    InstallerAndPortable.Height := ScaleY(62);
    InstallerAndPortable.Caption := 'Пожалуйста, выберите версию:';
    //==============================================================//
    Icons:=TNewGroupBox.Create(WizardForm);
    Icons.Parent := ComponentsPage.Surface;
    Icons.Left := ScaleX(10);
    Icons.Top := ScaleY(70);
    Icons.Width := ScaleX(205);
    Icons.Height := ScaleY(105);
    Icons.Caption := 'Ярлыки:';
    //==============================================================//
    //==============================================================//
    Lang:=TNewGroupBox.Create(WizardForm);
    Lang.Parent := ComponentsPage.Surface;
    Lang.Left := ScaleX(10);
    Lang.Top := ScaleY(175);
    Lang.Width := ScaleX(205);
    Lang.Height := ScaleY(60);
    Lang.Caption := 'Выбор языка программы:';
    //==============================================================//
    InstallerPanel:= TPanel.Create(WizardForm);
    InstallerPanel.Parent := ComponentsPage.Surface;
    InstallerPanel.Left := ScaleX(236);
    InstallerPanel.Top := ScaleY(16);
    InstallerPanel.Width := ScaleX(180);
    InstallerPanel.Height := ScaleY(180);
    InstallerPanel.BevelOuter := bvNone;
    //==============================================================//
    PortablePanel:= TPanel.Create(WizardForm);
    PortablePanel.Parent := ComponentsPage.Surface;
    PortablePanel.Left := ScaleX(236);
    PortablePanel.Top := ScaleY(16);
    PortablePanel.Width := ScaleX(180);
    PortablePanel.Height := ScaleY(180);
    PortablePanel.BevelOuter := bvNone;
    //==============================================================//
    Installer:=TNewRadioButton.Create(WizardForm);
    Installer.Parent :=InstallerAndPortable;
    Installer.Left := ScaleX(8);
    Installer.Top := ScaleY(15);
    Installer.Width := ScaleX(170);
    Installer.Height := ScaleY(17);
    Installer.Caption := 'Установка обычной версий';
    Installer.Checked := not CheckParam('/P');
    Installer.OnClick:=@CopmpClick;
    //==============================================================//
    Portable:=TNewRadioButton.Create(WizardForm);
    Portable.Parent := InstallerAndPortable;
    Portable.Left := ScaleX(8);
    Portable.Top := ScaleY(35);
    Portable.Width := ScaleX(190);
    Portable.Width := ScaleX(190);
    Portable.Caption := 'Установка портативной версии';
    Portable.Checked := CheckParam('/P');
    Portable.OnClick:=@CopmpClick;
    //==============================================================//
    DesktopIcons:=TNewCheckBox.Create(WizardForm);
    DesktopIcons.Parent := Icons;
    DesktopIcons.Left := ScaleX(8);
    DesktopIcons.Top := ScaleY(20);
    DesktopIcons.Width := ScaleX(185);
    DesktopIcons.Height := ScaleY(17);
    DesktopIcons.Caption := 'Ярлык(и) на «Рабочем столе';
    DesktopIcons.Checked:=true;
    //==============================================================//
    GroupIcons:=TNewCheckBox.Create(WizardForm);
    GroupIcons.Parent := Icons;
    GroupIcons.Left := ScaleX(8);
    GroupIcons.Top := ScaleY(40);
    GroupIcons.Width := ScaleX(161);
    GroupIcons.Height := ScaleY(17);
    GroupIcons.Caption := 'Ярлыки в меню «Пуск»';
    GroupIcons.Checked:=true;
    //==============================================================//
    TaskBarIcons:=TNewCheckBox.Create(WizardForm);
    TaskBarIcons.Parent := Icons;
    TaskBarIcons.Left := ScaleX(8);
    TaskBarIcons.Top := ScaleY(60);
    TaskBarIcons.Width := ScaleX(137);
    TaskBarIcons.Height := ScaleY(17);
    TaskBarIcons.Caption := 'Ярлык в панели задач';
    //==============================================================//
    StartMenuIcons:=TNewCheckBox.Create(WizardForm);
    StartMenuIcons.Parent := Icons;
    StartMenuIcons.Left := ScaleX(8);
    StartMenuIcons.Top := ScaleY(80);
    StartMenuIcons.Width := ScaleX(153);
    StartMenuIcons.Height := ScaleY(17);
    StartMenuIcons.Caption := 'Закрепить в меню «Пуск»';
    //==============================================================//
    //==============================================================//
    En:=TNewRadioButton.Create(WizardForm);
    En.Parent :=Lang;
    En.Left := ScaleX(8);
    En.Top := ScaleY(15);
    En.Width := ScaleX(170);
    En.Height := ScaleY(17);
    En.Caption := 'Английская версия программы';
    //==============================================================//
    Ru:=TNewRadioButton.Create(WizardForm);
    Ru.Parent := Lang;
    Ru.Left := ScaleX(8);
    Ru.Top := ScaleY(35);
    Ru.Width := ScaleX(190);
    Ru.Width := ScaleX(190);
    Ru.Caption := 'Русская версия программы';
    Ru.Checked := True;
    //==============================================================//
    InstallerImage:=ImgLoad(InstallerPanel.Handle,ExpandConstant('{tmp}\Installer.png'),ScaleX(0),ScaleY(0),ScaleX(178),ScaleY(178),False,False);
    ImgApplyChanges(InstallerPanel.Handle);
    //==============================================================//
    PortableImage:=ImgLoad(PortablePanel.Handle,ExpandConstant('{tmp}\Portable.png'),ScaleX(0),ScaleY(0),ScaleX(180),ScaleY(180),False,False);
    ImgApplyChanges(PortablePanel.Handle);
    //==============================================================//
    end;
    //=======================================================================================================================================================================//
    //=======================================================================================================================================================================//
    const
    LOAD_LIBRARY_AS_DATAFILE = $2;

    #define A = (Defined UNICODE) ? "W" : "A"

    function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
    function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
    function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';

    /////////////////////////////////////////////////////////////////////////
    function PinToTaskbar(const szFilename: String; TaskBar, IsPin: Boolean): Boolean;
    //szFilename: full path to executable file
    //TaskBar: False - pin to StartMenu, True - pin to TaskBar
    //IsPin: False - unpin from TaskBar/StartMenu, True - pin to TaskBar/StartMenu
    var
    hInst: THandle;
    buf: array [0..255] of Char;
    i, res: Integer;
    strLnk, strVerb: String;
    objShell, colVerbs: Variant;
    begin
    Result := False;
    if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit;
    if IsPin then
    begin
    if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
    begin
    while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
    if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
    end;
    if TaskBar then res := 5386 else res := 5381;
    end else if TaskBar then res := 5387 else res := 5382;
    hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
    if hInst <> 0 then
    try
    for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf, strVerb, i+1);
    try
    objShell := CreateOleObject('Shell.Application');
    colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
    for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item.Name, strVerb) = 0 then
    begin
    colVerbs.Item.DoIt;
    Result := True;
    Break;
    end;
    except
    Exit;
    end;
    finally
    FreeDLL(hInst);
    end;
    end;
    //=======================================================================================================================================================================//
    procedure TaskbarStartMenu(CurPageID: integer);
    begin
    case CurPageID of
    wpFinished: begin
    if TaskBarIcons.Checked then
    PinToTaskbar(WizardDirValue + '\{#MyAppExeName}', True, True);
    if StartMenuIcons.Checked then
    PinToTaskbar(WizardDirValue + '\{#MyAppExeName}', False, True);
    end;
    end;
    end;
    //=======================================================================================================================================================================//
    procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
    var
    instPath: string;
    begin
    if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppName")}_is1',
    'InstallLocation', instPath) then begin
    case CurUninstallStep of
    usUninstall: begin
    PinToTaskbar(instPath + '\{#MyAppExeName}', True, False);
    PinToTaskbar(instPath + '\{#MyAppExeName}', False, False);
    end;
    end;
    end;
    end;

    //=======================================================================================================================================================================//
    Procedure HideComponents();
    begin
    PortablePanel.Hide;
    InstallerPanel.Hide;
    end;
    //=======================================================================================================================================================================//
    Procedure ShowComponents(CurPageID: Integer);
    begin
    Case CurPageID of
    ComponentsPage.ID:
    begin
    InstallerPanel.Show;
    end;
    end;
    end;
    //=======================================================================================================================================================================//
    function ShouldSkipPage(PageID: Integer): Boolean;
    begin
    if Portable.Checked then
    begin
    if (PageID = 8) then
    Result:= True;
    end;
    end;
    //=======================================================================================================================================================================//
    procedure CurPageChanged(CurPageID: Integer);
    begin
    TaskbarStartMenu(CurPageID);
    HideComponents;
    ShowComponents(CurPageID);
    end;
    //=======================================================================================================================================================================//
    procedure DeinitializeSetup();
    begin
    gdipShutdown;
    end;
    //=======================================================================================================================================================================//

    Ru.Checked := False то все нормально но мне хотелось чтобы по умолчанию он был включен

    Вот примеры батников
    Installer- Eng
    start /wait setup.exe /VERYSILENT /I /En
    Installer- Rus
    start /wait setup.exe /VERYSILENT /I /Ru
    Portable - Eng
    start /wait setup.exe /VERYSILENT /P /En
    Portable - Rus
    start /wait setup.exe /VERYSILENT /P /Ru


    Пример обновил может кому пригодиться за исправления спасибо sergey3695

    sergey3695, Большое спасибо за ответ
    p.s. я подправил сам XD
     
    Последнее редактирование: 5 мар 2018
    AlexS, Xabib2302 и Хамик нравится это.
  14. Пользователь

    Регистрация:
    1 фев 2017
    Сообщения:
    17
    Симпатии:
    0
    Пол:
    Мужской
    Всем привет! Прошу помощи в решении проблемы(задачи).
    Давненько в этой ветке форума задавался уже вопрос (от Хамика) по замене ключа тихой установки (/verysilent) коротким ключом (/S) как у других аналогов InnoSetup. Я тоже пробовал изобретать велосипед решая эту задачу, но успехов мало...
    Решение нашел на oszone. Код был рабочий, но при использовании нескольких языков в инсталляторе, тихая установка с ключом (/S) работала криво.
    Попросил помощи в решении проблемы там же на oszone... Откликнулся один очень хороший человек и помог. В ходе дальнейшего построения скрипта нарвался на очередную проблему по тихой установке и не понимаю где причина, а опять тревожить того хорошего человека уже как-то совестно (и так хорошо помог).
    В обшем если запустить установщик со старым (/verysilent) и скомбинировать с какими-либо другими ключами, то все работает чётко.
    Запускаю с ключом (/S) и с некоторыми другими, то тихая установка по ключу (/S) происходит скрыто, но не работают остальные ключи идущие с ним в команде. Тут нужно либо найти причину, по которой установка с ключом (/S) не хочет работать с другими ключами, либо может кто-то знает другой метод реализации сего...
    Код (Inno):
    1. [Setup]
    2. AppName=My Program
    3. AppVersion=1.1
    4. DefaultDirName={pf}\My Program
    5. DirExistsWarning=no
    6. DisableDirPage=yes
    7. DefaultGroupName=My Program
    8. DisableWelcomePage=yes
    9. DisableProgramGroupPage=yes
    10. DisableReadyPage=yes
    11.  
    12. [Languages]
    13. Name: "english"; MessagesFile: "compiler:Languages\English.isl"
    14. Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
    15.  
    16. [Files]
    17. Source: "{app}\FileEng.txt"; DestDir: "{app}"; Check: "LEng"; Flags: ignoreversion
    18. Source: "{app}\FileRus.txt"; DestDir: "{app}"; Check: "LRus"; Flags: ignoreversion
    19. Source: "{app}\FileUkr.txt"; DestDir: "{app}"; Check: "LUkr"; Flags: ignoreversion
    20.  
    21. [Icons]
    22. Name: "{group}\My Program\FileRus.txt"; Filename: "{app}\FileRus.txt"; Check: "LRus and StartMenuIcon";
    23. Name: "{group}\My Program\FileEng.txt"; Filename: "{app}\FileEng.txt"; Check: "LEng and StartMenuIcon";
    24. Name: "{group}\My Program\FileUkr.txt"; Filename: "{app}\FileUkr.txt"; Check: "LUkr and StartMenuIcon";
    25. Name: "{commondesktop}\FileRus.txt"; Filename: "{app}\FileRus.txt"; Check: "LRus and DesktopIcon";
    26. Name: "{commondesktop}\FileEng.txt"; Filename: "{app}\FileEng.txt"; Check: "LEng and DesktopIcon";
    27. Name: "{commondesktop}\FileUkr.txt"; Filename: "{app}\FileUkr.txt"; Check: "LUkr and DesktopIcon";
    28.  
    29. [_Code]
    30.  
    31. var
    32.   CustomPage: TWizardPage;
    33.   LangRus, LangEng, LangUkr: TNewRadioButton;
    34.   DesktopIconCheckBox, StartMenuCheckBox: TNewCheckBox;
    35.  
    36. function InitializeLanguageDialog(): Boolean;
    37. var
    38.   i : Integer;
    39. begin
    40.   Result := True;
    41.   for i := 1 to ParamCount do
    42.     if  LowerCase(ParamStr(i)) = '/s' then
    43.     begin
    44.       Result := False;
    45.       Break;
    46.     end;
    47. end;
    48.  
    49. function InitializeSetup(): Boolean;
    50. var
    51.   i, ResultCode: Integer;
    52. begin
    53. begin
    54.   for i := 1 to ParamCount do
    55.   if LowerCase(ParamStr(i)) = '/s' then
    56.   begin
    57.     Exec(ExtractFileName(ExpandConstant('{srcexe}')), '/verysilent', ExtractFileDir(ExpandConstant('{srcexe}')), SW_SHOWNORMAL, ewNoWait, ResultCode);
    58.     Exit;
    59.   end;
    60.   Result := True;
    61.   end;
    62. end;
    63.  
    64. function CheckParam(s: string): boolean;
    65. var
    66.   i: integer;
    67. begin
    68.   for i := 0 to ParamCount do begin
    69.   Result := ParamStr(i) = s;
    70.   if Result then Break;
    71. end;
    72. end;
    73.  
    74. function LRus: Boolean; begin Result:= LangRus.Checked or CheckParam('/RU') or CheckParam('/R'); end;
    75. function LEng: Boolean; begin Result:= LangEng.Checked or CheckParam('/EN') or CheckParam('/E'); end;
    76. function LUkr: Boolean; begin Result:= LangUkr.Checked or CheckParam('/UA') or CheckParam('/U'); end;
    77. function DesktopIcon: Boolean; begin if not CheckParam('/ND') and not CheckParam('/NoDesktop') then Result := DesktopIconCheckBox.Checked end;
    78. function StartMenuIcon: Boolean; begin if not CheckParam('/NM') and not CheckParam('/NoStartMenu') then Result := StartMenuCheckBox.Checked end;
    79.  
    80. procedure InitializeWizard();
    81. begin
    82.   { Custom wizard page }
    83.   CustomPage := CreateCustomPage(wpSelectTasks, 'CustomPage_Caption', 'CustomPage_Description');
    84.  
    85.   { LangRus_RadioButton }
    86.   LangRus := TNewRadioButton.Create(WizardForm);
    87.   with LangRus do
    88.   begin
    89.     Parent := CustomPage.Surface;
    90.     SetBounds(ScaleX(8),ScaleY(24),ScaleX(113),ScaleY(17));
    91.     Caption := 'Русский';
    92.     Checked:= not CheckParam('/RU') or not CheckParam('/R');
    93.   end;
    94.  
    95.   { LangEng_RadioButton }
    96.   LangEng := TNewRadioButton.Create(WizardForm);
    97.   with LangEng do
    98.   begin
    99.     Parent := CustomPage.Surface;
    100.     SetBounds(ScaleX(8),ScaleY(48),ScaleX(113),ScaleY(17));
    101.     Caption := 'Английский';
    102.     Checked:= CheckParam('/EN') or CheckParam('/E');
    103.   end;
    104.  
    105.   { LangUkr_RadioButton }
    106.   LangUkr := TNewRadioButton.Create(WizardForm);
    107.   with LangUkr do
    108.   begin
    109.     Parent := CustomPage.Surface;
    110.     SetBounds(ScaleX(8),ScaleY(72),ScaleX(113),ScaleY(17));
    111.     Caption := 'Украинский';
    112.     Checked:= CheckParam('/UA') or CheckParam('/U');
    113.   end;
    114.  
    115.   { DesktopIcon_CheckBox }
    116.   DesktopIconCheckBox := TNewCheckBox.Create(WizardForm);
    117.   with DesktopIconCheckBox do
    118.   begin
    119.     Parent := CustomPage.Surface;
    120.     SetBounds(ScaleX(8),ScaleY(130),ScaleX(166),ScaleY(17));
    121.     Caption := 'Ярлык на рабочем столе';
    122.     Checked:=not CheckParam('/ND') or not CheckParam('/NoDesktop');
    123.   end;
    124.   { StartMenu_CheckBox }
    125.   StartMenuCheckBox := TNewCheckBox.Create(WizardForm);
    126.   with StartMenuCheckBox do
    127.   begin
    128.     Parent := CustomPage.Surface;
    129.     SetBounds(ScaleX(8),ScaleY(150),ScaleX(166),ScaleY(17));
    130.     Caption := 'Ярлыки в меню Пуск';
    131.     Checked:=not CheckParam('/NM') or not CheckParam('/NoStartMenu');
    132.   end;
    133. end;
    134.  
    135. procedure CurPageChanged(CurPageID: Integer);
    136. begin
    137. case CurPageID of
    138. CustomPage.ID:
    139.   begin
    140.     WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall);
    141.   end;
    142. end;
    143. end;
     
  15. Борода Супер модератор

    Регистрация:
    15 июн 2011
    Сообщения:
    757
    Симпатии:
    612
    Пол:
    Мужской
    AlexS, да мне нетрудно ) разгадка простая, Читай внимательно комментарии
    Код (Inno):
    1.  
    2. function InitializeSetup(): Boolean;
    3. var
    4. i, ResultCode: Integer;
    5. begin
    6.   for i := 1 to ParamCount do// перебираем параметры
    7.   if LowerCase(ParamStr(i)) = '/s' then //если находим параметр /s
    8.   begin//то запускаем  инсталлятор заново с единственным ключем /verysilent, остальные идут лесом
    9.     Exec(ExtractFileName(ExpandConstant('{srcexe}')), '/verysilent', ExtractFileDir(ExpandConstant('{srcexe}')), SW_SHOWNORMAL, ewNoWait, ResultCode);
    10.     Exit;// из текущего процесса мы тут выходим.
    11.   end;
    12.   Result := True;
    13. end;
    14.  
    дай список подменных ключей, сделаю функцию, чтобы все работало как нужно
     
  16. Безумный Лорд Администратор

    Регистрация:
    15 июн 2011
    Сообщения:
    790
    Симпатии:
    1.147
    Пол:
    Мужской
    AlexS, там не передаются параметры при перезапуске инсталлера. Держи
    Код (Text):
    1. function InitializeSetup(): Boolean;
    2. var
    3.   i, k, ResultCode: Integer;
    4.   params, p: String;
    5. begin
    6.   for i := 1 to ParamCount do begin
    7.  
    8.     // Skip non /S paramters
    9.     if LowerCase(ParamStr(i)) <> '/s' then
    10.       Continue;
    11.  
    12.     // Build param string
    13.     params:= '';
    14.     for k := 1 to ParamCount do begin
    15.  
    16.       // Skip /S option
    17.       if (k = i) then
    18.         Continue;
    19.  
    20.       // Skip srcexe and /SL5 params
    21.       p:= ParamStr(k);
    22.       if (Pos('/SL5', p) = 1) or (Pos(ExpandConstant('{srcexe}'), p) = 1) then
    23.         Continue;
    24.  
    25.       // Append parameter
    26.       params:= params + ' ' + AddQuotes(p);
    27.     end;
    28.  
    29.     Exec(ExtractFileName(ExpandConstant('{srcexe}')), '/verysilent' + params, ExtractFileDir(ExpandConstant('{srcexe}')), SW_SHOWNORMAL, ewNoWait, ResultCode);
    30.     Exit;
    31.   end;
    32.  
    33.   Result := True;
    34. end;
     
    Хамик, AlexS, vint56 и ещё 1-му нравится это.
  17. Безумный Лорд Администратор

    Регистрация:
    15 июн 2011
    Сообщения:
    790
    Симпатии:
    1.147
    Пол:
    Мужской
    sergey3695, кода поменьше, таки да. Но StringChange не ignorecase функция и есть вероятность, что зацепит другие параметры, которые начинаются на /s

    ЗЫ Еще пропадает экранирование параметров кавычками
     
    Последнее редактирование: 25 мар 2020
    sergey3695 нравится это.
  18. Пользователь

    Регистрация:
    1 фев 2017
    Сообщения:
    17
    Симпатии:
    0
    Пол:
    Мужской
    LexBell, я так понимаю Вы и есть тот хороший человек с другого форума (аватарка одинаковая). Если так, то ещё раз спасибо за отзывчивость и помощь.
    Shegorat, спасибо большое! Код рабочий!
    sergey3695, запустил и получил бесконечную установку по кругу, пришлось повозиться, чтобы остановить. Но всё равно спасибо и Вам!
     

Поделиться этой страницей