Inno setup 使用Inno Setup包含注册表、自定义消息和代码文件的正确方法

Inno setup 使用Inno Setup包含注册表、自定义消息和代码文件的正确方法,inno-setup,Inno Setup,这听起来可能是个愚蠢的问题。目前,我已经创建了三个文件: 自动备份设置页面 autobackupsettingpage\u自定义消息 AutoBackupSettingsPage\u注册表 第一个文件的顶部有一个[code]部分,后面是“我的自动备份”功能的处理程序和自定义页面 第二个文件的顶部有一个[CustomMessages]部分,后面是所有适当的自定义消息 第三个文件的顶部有一个[Registry]部分,后面是所有注册表项定义 目前,我正在使用这样的#include(代码截断): [注册

这听起来可能是个愚蠢的问题。目前,我已经创建了三个文件:

  • 自动备份设置页面
  • autobackupsettingpage\u自定义消息
  • AutoBackupSettingsPage\u注册表
  • 第一个文件的顶部有一个
    [code]
    部分,后面是“我的自动备份”功能的处理程序和自定义页面

    第二个文件的顶部有一个
    [CustomMessages]
    部分,后面是所有适当的自定义消息

    第三个文件的顶部有一个
    [Registry]
    部分,后面是所有注册表项定义

    目前,我正在使用这样的
    #include
    (代码截断):

    [注册表]
    #包括“\AutoBackupSettingsPage_Registry.iss”
    [定制信息]
    #包括“\AutoBackupSettingsPage\u CustomMessages.iss”
    [守则]
    程序设置;
    {全局变量}
    变量
    二次升级:布尔;
    dotnetRedistPath:字符串;
    dotNetNeeded:布尔值;
    bDownloadHelpDocSetup:布尔值;
    VCRedist64位路径:字符串;
    vcRedist32BitPath:字符串;
    BVCREDist64BitRequired:布尔值;
    BVCREDist32bitRequired:布尔值;
    bSelectTasksVisited:布尔值;
    {下载向导表单插件}
    #定义DWISHS\u使用\u预定义\u下载\u向导页面
    #定义数据缓冲区长度65536
    #定义DWISHS\u自动\u继续
    #包括“\dwinshs\dwinshs.iss”
    {自动备份设置页}
    #包括“\AutoBackupSettingsPage.iss”
    {从VclStylesInno.DLL导入LoadVCLStyle函数}
    过程装入vclstyle(VClStyleFile:String);外部的LoadVCLStyleW@files:VclStylesInno.dll stdcall setuponly';
    程序LoadVCLStyle_UnInstall(VClStyleFile:String);外部“LoadVCLStyleW@{%TEMP}\VclStylesInno.dll stdcall uninstallonly delayload”;
    
    起初,我希望将所有文件放在一个文件中,但后来我得出结论,在
    code
    部分开始之后插入
    Registry
    CustomMessages
    部分是错误的,这会混淆系统。因此,我通过使用不同的文件并将每个文件都包含在正确的部分来保持简单

    这是使用Inno设置进行此类操作的正确方法吗


    为了说明这一点,在我的主ISS文件的上下文中是这样的:

    • [设置]
    • [任务]
    • [文件]
    • [图标]
    • [运行]
    • [UninstallRun]
    • [\u istool]
    • [注册表]
    • [UninstallDelete]
    • [InstallDelete]
    • [语言]
    • [CustomMessages]
    • [Dirs]
    • [第三方]
    • [code]
    • [CustomMessages]
      #
    • [注册表]
      #
    • [code]
      #
    • [code]
    带有
    #
    字符的将是单个
    #include
    文件。不知道这样破坏
    code
    部分是否会被认为是糟糕的设计


    为了讨论的缘故,拿这些小块。当你的代码< >包含< <代码>文件>在代码的中间> [代码] < /code >章节:

    时,它们只是传达了发生了什么的想法。
    ; Contents before here in master
    ; ...
    ; ...
    [Code]
    program Setup;
    
    { global variables }
    var
      bIsUpgrading: Boolean;
      dotnetRedistPath: string;
      dotNetNeeded: boolean;
      bDownloadHelpDocSetup: boolean;
      vcRedist64BitPath: string;
      vcRedist32BitPath: string;
      bVcRedist64BitNeeded : boolean;
      bVcRedist32BitNeeded : boolean;
      bSelectTasksVisited: Boolean;
    
    ; =================================
    ; Start of included file
    
    [Registry]
    ; 32 Bit
    Root: "HKLM"; \
        Subkey: "Software\MeetSchedAssist\Meeting Schedule Assistant\Options"; \
        ValueType: dword; \
        ValueName: "BackupAtShutdownWhat"; \
        ValueData: "{code:GetWhatToBackupMode|0}"; \
        Flags: uninsdeletevalue; \
        Check: IsNewInstall
    
    Root: "HKLM"; \
        Subkey: "Software\MeetSchedAssist\Meeting Schedule Assistant\Options"; \
        ValueType: dword; \
        ValueName: "BackupAtShutdownMode"; \
        ValueData: "{code:GetHowToBackupMode|0}"; \
        Flags: uninsdeletevalue; \
        Check: IsNewInstall
    
    [CustomMessages]
    pageAutoBackupTitle=Automatic Backup
    pageAutoBackupDescription=Configure automatic backup settings.
    lblBackupWhat=What to backup:
    radBackupWhatNone=Don't perform any backup when the program shuts down
    radBackupWhatComplete=Make a complete backup when the program shuts down
    radBackupWhatEssential=Only make an essential backup when the program shuts down
    lblBackupMode=How to backup:
    radBackupModeAuto=Perform automatically when the program is shut down
    radBackupModeManual=Prompt the user when the program is shut down
    lblPromptMode=Also prompt to backup at the following intervals while the application is running:
    cmbPromptModeItemNever=Never prompt to backup
    cmbPromptModeItemDaily=Prompt to backup everyday
    cmbPromptModeItemWeekly=Prompt to backup once a week
    cmbPromptModeItemMonthly=Prompt to backup once a month
    lblBackupFolder=Where to backup:
    
    
    [Code]
    
    { Constants }
    const
      BackupWhat_None = 0;
      BackupWhat_Complete = 1;
      BackupWhat_Essential = 2;
    
        BackupMode_Automatic = 0;
      BackupMode_Manual = 1;
    
        BackupPrompt_Never = 0;
        BackupPrompt_Daily = 1;
        BackupPrompt_Weekly = 2;
        BackupPrompt_Monthly = 3;
    
    { Global Variables }
    var
      pageAutoBackup: TWizardPage;
      pnlBackupWhat: TPanel;
      lblBackupWhat: TLabel;
      radBackupWhatNone: TNewRadioButton;
      radBackupWhatComplete: TNewRadioButton;
      radBackupWhatEssential: TNewRadioButton;
      lblBackupMode: TLabel;
      pnlBackupMode: TPanel;
      radBackupModeAuto: TNewRadioButton;
      radBackupModeManual: TNewRadioButton;
      lblPromptMode: TLabel;
      cmbPromptMode: TNewComboBox;
      lblBackupFolder: TLabel;
      txtBackupFolder: TNewEdit;
      btnSelectBackupFolder: TNewButton;
    
    ;====================================
    ; Now the master continues with the code:
    
    { Import the LoadVCLStyle function from VclStylesInno.DLL }
    procedure LoadVCLStyle(VClStyleFile: String); external 'LoadVCLStyleW@files:VclStylesInno.dll stdcall setuponly';
    procedure LoadVCLStyle_UnInstall(VClStyleFile: String); external 'LoadVCLStyleW@{%TEMP}\VclStylesInno.dll stdcall uninstallonly delayload';
    
    { Import the UnLoadVCLStyles function from VclStylesInno.DLL }
    procedure UnLoadVCLStyles; external 'UnLoadVCLStyles@files:VclStylesInno.dll stdcall setuponly';
    procedure UnLoadVCLStyles_UnInstall; external 'UnLoadVCLStyles@{app}\VclStylesInno.dll stdcall uninstallonly';
    
    { Importing ShowWindow Windows API from User32.DLL }
    function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';
    
    const
      { Changed to 4.6.2 download link (see: http://msdn.microsoft.com/en-us/library/ee942965%28v=vs.110%29.aspx#redist) }
    

    Inno安装程序不关心节的顺序。你甚至可以把这些部分分成几个部分,然后按你喜欢的方式混合


    剩下的只是你的编码风格和个人喜好。

    我不清楚你在问什么。@Bill\u Stewart我说得再清楚不过了。在主文件中,我们使用一些公共变量等启动一个
    [code]
    部分。然后(由于
    #include
    它突然转到
    [registry]
    部分,然后是
    [custommessages]
    部分,然后是
    [code]
    部分,最后返回到原始主文件
    [code]
    section。可以接受将注册表/自定义消息部分插入到代码部分的中间?明白。这是第22条军规。我的个人风格是,我有一个包含的文件,从而使其模块化。但我的OCD告诉我,我知道这些部分断裂看起来很糟糕。哦,好吧!谢谢确认。