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提供了一些例子,可以参考学习。

原文地址:https://www.cnblogs.com/rixiang/p/7049475.html