Компоненты на основе реестра с Inno Setup

Я создаю приложение для своей компании. И цель состоит в том, чтобы создать универсальный установщик, который будет проверять реестр пользователя на наличие определенных установленных приложений и в соответствии с этими приложениями создавать список доступных компонентов установки в окне «Выбор компонентов». И это особая проблема, с которой я столкнулся.

Я уже создал установщик, но пользователь должен отметить/снять отметку с компонентов, которые ему не нужны, потому что он не использует конкретное приложение. Это определенно не очень хороший способ сделать что-то, я думаю...

Поэтому прошу помощи, пожалуйста. Можно ли это реализовать через окно «Выбор компонентов» и как, или я должен создать пользовательскую страницу мастера с флажками (опять же - как)?

Большое спасибо заранее.

P.S. Я уже использовал функцию «Проверить» в своем скрипте, но в этом случае программа автоматически устанавливает все компоненты, связанные с найденными приложениями, на компьютер пользователя, а иногда пользователям это не нужно....


person cyxou    schedule 26.05.2010    source источник


Ответы (2)


Это удаляет компонент на основе значения реестра. Вы захотите изменить это, чтобы оно соответствовало каждому приложению, которое вы пытаетесь установить, и, вероятно, вам понадобится функция проверки для каждого приложения.

    ; -- Components.iss --
    ; Demonstrates a components-based installation.

    ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES!

    [Setup]
    AppName=My Program
    AppVerName=My Program version 1.5
    DefaultDirName={pf}\My Program
    DefaultGroupName=My Program
    UninstallDisplayIcon={app}\MyProg.exe
    OutputDir=userdocs:Inno Setup Examples Output

    [Types]
    Name: "full"; Description: "Full installation"
    Name: "compact"; Description: "Compact installation"
    Name: "custom"; Description: "Custom installation"; Flags: iscustom

    [Components]
    Name: "program"; Description: "Program Files"; Types: full compact custom; Flags: fixed
    Name: "help"; Description: "Help File"; Types: full; Check: IsMyAppInstalled
    Name: "readme"; Description: "Readme File"; Types: full
    Name: "readme\en"; Description: "English"; Flags: exclusive
    Name: "readme\de"; Description: "German"; Flags: exclusive

    [Files]
    Source: "MyProg.exe"; DestDir: "{app}"; Components: program
    Source: "MyProg.chm"; DestDir: "{app}"; Components: help
    Source: "Readme.txt"; DestDir: "{app}"; Components: readme\en; Flags: isreadme
    Source: "Readme-German.txt"; DestName: "Liesmich.txt"; DestDir: "{app}"; Components: readme\de; Flags: isreadme

    [Icons]
    Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"

    [Code]
    function IsMyAppInstalled(): Boolean;
    Var
      installed: String;

    begin
      if RegQueryStringValue(HKEY_CURRENT_USER, 'Software\MyApp',
         'Installed', installed) then
        result := true
      Else
        result := false;
    end;
person mirtheil    schedule 26.05.2010
comment
О, чувак, я использовал функцию проверки в [Файлах], но я не думал, что ее можно использовать и в разделе [Компоненты]. Большое спасибо за помощь! Я должен более внимательно прочитать файл справки inno: - person cyxou; 27.05.2010
comment
Пожалуйста, замените if RegQueryStringValue(HKEY_CURRENT_USER, 'Software\MyApp', 'Installed', installed) then result := true Else result := false; на result := RegQueryStringValue(HKEY_CURRENT_USER, 'Software\MyApp', 'Installed', installed) - person Andreas Rejbrand; 13.06.2010

То, что вы хотите сделать, выходит за рамки дизайна Inno Setup, и я думаю, что вам нужно написать свой собственный установщик вместо использования общей структуры установщика, такой как Inno Setup.

person Lex Li    schedule 13.06.2010
comment
Inno Setup поддерживает сценарии Pascal, поэтому вы можете расширить функциональность по своему желанию. - person Andreas Rejbrand; 13.06.2010
comment
Мне помог совет Миртейла! Но недавно я решил развернуть свой проект с помощью WIX.... - person cyxou; 15.06.2010