• Inno Setup制作最简单的安装程序


    目标就是【把exe程序放到制定目录,然后自动把工程需要的dll放到system32目录下,自动注册注册表。】

    实现上述需求,用Inno Setup可以非常方便快捷实现。

    安装Inno Setup。

    点击新建。新建过程可以填写名字、选择图标等等……具体不多说。

    之后自动生成了一个iss脚本。在此基础上简单改写,就可以实现我上面讲的需求。

    ; Script generated by the Inno Setup Script Wizard.
    ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
    
    #define MyAppName "My Program"
    #define MyAppVersion "1.5"
    #define MyAppPublisher "My Company, Inc."
    #define MyAppURL "http://www.example.com/"
    #define MyAppExeName "MyProg.exe"
    
    [Setup]
    ; NOTE: The value of AppId uniquely identifies this application.
    ; Do not use the same AppId value in installers for other applications.
    ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
    AppId={{AC02AFFF-0E81-4E48-AF82-FB09D7BA9F3E}
    AppName={#MyAppName}
    AppVersion={#MyAppVersion}
    ;AppVerName={#MyAppName} {#MyAppVersion}
    AppPublisher={#MyAppPublisher}
    AppPublisherURL={#MyAppURL}
    AppSupportURL={#MyAppURL}
    AppUpdatesURL={#MyAppURL}
    DefaultDirName={pf}{#MyAppName}
    DisableProgramGroupPage=yes
    OutputBaseFilename=setup
    Compression=lzma
    SolidCompression=yes
    ArchitecturesInstallIn64BitMode=x64
    
    [Languages]
    Name: "english"; MessagesFile: "compiler:Default.isl"
    
    [Tasks]
    Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
    
    [Files]
    Source: "MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
    Source: "libmysql.dll"; DestDir: "{sys}";Check: not Is64BitInstallMode
    Source: "libmysql.dll"; DestDir: "{sys}";Check: Is64BitInstallMode 
    Source: "htmlayout.dll"; DestDir: "{sys}";Check: not Is64BitInstallMode
    Source: "htmlayout.dll"; DestDir: "{sys}";Check: Is64BitInstallMode 
    ; NOTE: Don't use "Flags: ignoreversion" on any shared system files
    
    [Icons]
    Name: "{commonprograms}{#MyAppName}"; Filename: "{app}{#MyAppExeName}"
    Name: "{commondesktop}{#MyAppName}"; Filename: "{app}{#MyAppExeName}"; Tasks: desktopicon
    
    [Run]
    Filename: "{app}{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

    [Files]

    下面填写要选择目录安装的MyProg.exe,以及需要自动安装到系统目录的两个dll。

    [Files]
    Source: "MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
    Source: "libmysql.dll"; DestDir: "{sys}";Check: not Is64BitInstallMode
    Source: "libmysql.dll"; DestDir: "{sys}";Check: Is64BitInstallMode 
    Source: "htmlayout.dll"; DestDir: "{sys}";Check: not Is64BitInstallMode
    Source: "htmlayout.dll"; DestDir: "{sys}";Check: Is64BitInstallMode 
    ; NOTE: Don't use "Flags: ignoreversion" on any shared system files

    如果需要注册注册表,需要在[Registry]下面添加。

    我给出一个示例写法:

    [Registry]
    ;Root: HKLM; Subkey:  "SOFTWAREMicrosoftWindowsCurrentVersionAuthenticationCredential Providers{{6f45dc1e-5384-457a-bc13-2cd81b0d28ed}"; Flags: deletekey
    Root: HKLM; Subkey:  "SOFTWAREMicrosoftWindowsCurrentVersionAuthenticationCredential Provider Filters{{FF032558-38DA-4472-B969-31A636B7E5C7}"; ValueType: string; ValueName: "";ValueData:"SampleAllControlsCredentialProvider";Flags: uninsdeletekey
    Root: HKLM; Subkey:  "SOFTWAREMicrosoftWindowsCurrentVersionAuthenticationCredential Providers{{FF032558-38DA-4472-B969-31A636B7E5C7}"; ValueType: string; ValueName: "";ValueData:"SampleAllControlsCredentialProvider";Flags: uninsdeletekey
    Root: HKCR; Subkey:  "CLSID{{FF032558-38DA-4472-B969-31A636B7E5C7}"; ValueType: string; ValueName:"";ValueData:"SampleAllControlsCredentialProvider";Flags: uninsdeletekey
    Root: HKCR; Subkey:  "CLSID{{FF032558-38DA-4472-B969-31A636B7E5C7}InprocServer32"; ValueType: string; ValueName:"";ValueData:"SampleAllControlsCredentialProvider.dll";Flags: uninsdeletekey
    Root: HKCR; Subkey:  "CLSID{{FF032558-38DA-4472-B969-31A636B7E5C7}InprocServer32"; ValueType: string; ValueName:"ThreadingModel";ValueData:"Apartment";Flags: uninsdeletekey

    写好脚本,进行编译,便生成了我们的setup.exe。

    安装目录下,将exe程序以及dll和setup.exe并列放置。点击setup.exe启动安装程序。

    效果:

    安装之后,会发现dll已经自动放在system32目录下。

    如果脚本里写了注册表配置的流程的话,注册表也会自动配置好。

    上面只是最简单的例子。我工作暂时就用到这些。

    更复杂的逻辑需要在[Code]下面写脚本。Inno Setup提供了一些例子,可以参考学习。

  • 相关阅读:
    日报9.4
    日报9.3
    低级错误整理
    树状数组求逆序对 笔记与思路整理
    st表、树状数组与线段树 笔记与思路整理
    Luogu P1098 字符串的展开
    Luogu P1816 忠诚
    jmeter cookie管理器 使用方法---新手学习记录1
    kali nessus 安装插件失败解决方法
    https tomcat 证书搭建
  • 原文地址:https://www.cnblogs.com/rixiang/p/7049475.html
Copyright © 2020-2023  润新知