基于注册表的组件与Inno Setup

时间:2010-05-26 07:47:12

标签: inno-setup

我正在为我的公司创建一个应用程序。目标是创建一个通用安装程序,该安装程序将检查用户的注册表以查找已安装的特定应用程序,并根据这些应用程序在“选择组件”窗口中创建可用安装组件的列表。这就是我特别困扰的问题。

我已经创建了安装程序,但是用户必须检查/取消选中他不需要的组件,因为他没有使用特定的应用程序。这绝对不是我猜的好方法......

所以我请求帮助。这可以通过“选择组件”窗口实现,我应该如何创建带有复选框的自定义向导页面(再次 - 如何)?

提前很多。

P.S。我已经在我的脚本中使用了Check功能,但在这种情况下,程序会自动在用户计算机上安装与找到的应用程序相关的所有组件,有时用户不需要....

2 个答案:

答案 0 :(得分:1)

这将根据注册表值删除组件。您需要修改它以适合您尝试安装的每个应用程序,并且可能需要为每个应用程序使用Check功能。

    ; -- 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;

答案 1 :(得分:0)

你想要做的事情不仅仅是Inno安装设计,我认为你需要编写自己的安装程序,而不是使用通用的安装程序框架,如Inno Setup。