目标就是【把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: "SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Providers\{{6f45dc1e-5384-457a-bc13-2cd81b0d28ed}"; Flags: deletekey
Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Provider Filters\{{FF032558-38DA-4472-B969-31A636B7E5C7}"; ValueType: string; ValueName: "";ValueData:"SampleAllControlsCredentialProvider";Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential 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提供了一些例子,可以参考学习。

Inno Setup制作最简单的安装程序的更多相关文章

  1. 在Unicode版Inno Setup中使用ISSkin给安装程序添加皮肤

    原文 http://www.cnblogs.com/2356/archive/2009/10/27/1590565.html 在Unicode版Inno Setup中使用ISSkin给安装程序添加皮肤 ...

  2. Inno Setup制作应用程序安装包

    我最近写了一个MFC应用程序,想发给其他的小伙伴玩一玩,直接发了个exe文件过去,结果发现小伙伴那边打不开.原来这个exe文件虽然是MFC静态编译的,但是还依赖了其他几个.dll文件,需要把这几个dl ...

  3. 用Inno Setup制作WEB程序安装包

    原文 用Inno Setup制作WEB程序安装包 最近做了一个WEB程序的安装包,我把制作的过程做个介绍,贴出源码给大家做个参考 看看inno 的脚本 [Setup] AppCopyright=tes ...

  4. [Azure DevOps] 使用 Inno Setup 制作桌面软件安装包

    1. 桌面应用程序的 CI/CD 桌面应用程序的 CI/CD 过程和网站有一些不同,毕竟桌面应用程序的"部署"只是将安装包分发到目标位置,连应用商店都不用上,根据公司的管理流程可以 ...

  5. 以前编写的inno setup脚本,涵盖了自定义安装界面,调用dll等等应用 (转)

    以前编写的inno setup脚本,涵盖了自定义安装界面,调用dll等等应用 (转) ; Script generated by the Inno Setup 脚本向导. ; SEE THE DOCU ...

  6. 用inno Setup制作web项目安装包

    http://www.cnblogs.com/xionghui/archive/2012/03/22/2411207.html 用inno Setup制作安装包 新建一个文件夹exambody,放ap ...

  7. 用Inno setup制作以管理员权限启动的安装包

    inno setup制作的安装包,默认是不需要管理员权限启动的.我们制作安装包,往往需要做一些设置工作,这些设置工作可能用到管理员权限.使用Resource Hacker修改inno setup资源, ...

  8. 使用inno setup 制作安装文件-demo1

    ; 脚本由 Inno Setup 脚本向导 生成! ; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档! #define MyAppName "查体管理系统" # ...

  9. 解决Inno Setup制作中文安装包在非中文系统上显示乱码的问题

    尼玛,好几个月没更新了.囧... 目前我司新的客户端开发已经接近尾声,该改的bug已经改完,该重构的地方也都差不多了.视觉效果也已经根据美工的样式改完了.所以,就差制作安装包了.正所谓万事俱备,只欠东 ...

随机推荐

  1. show binlog events 命令查看某个binlog日志内容

    mysql> show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];   选项解析:   IN 'l ...

  2. 免费的 C/C++ 编译&解释 器列表

    摘自<C++编程网>,详细介绍请参考http://www.cpp-prog.com/2009/0520/118.html MicrosoftVisual C++ 2008 Express  ...

  3. 今天犯了个小错误:_dataArray.count>1 和_dataArray.count>0搞混淆了

    _dataArray.count>1 和_dataArray.count>0搞混淆了:当数据为一条时,条件不成立.应该_dataArray.count>=1  或者>0   ( ...

  4. 【a703】求逆序对

    Time Limit: 10 second Memory Limit: 2 MB 问题描述 给定一个序列a1,a2...an.如果存在i小于j 并且ai大于aj,那么我们称之为逆序对,求给定序列中逆序 ...

  5. Java数据类型转换问题

    基本数据类型 整数型 byte --- 字节型 --- 1个字节 --- -27~27-1 -> -128~127 byte b1 = 25; byte b2 = 127; short --- ...

  6. Tomcat启动失败问题解决

    1. 系统框架加载正常,但是Tomcat启动失败,报错如下: 2013-7-26 17:18:33 org.apache.catalina.core.StandardContext startInte ...

  7. TensorFlow 实战(四)—— tensor 的认识

    tensorflow,即是 tensor flows,在 computation graph 中 flows(流动)的不是别人,正是 tensor: 1. tensor 基本属性 tensor 的名字 ...

  8. hexo主题选择和配置

    之前用next主题,发现文章标题都是h2,不利于seo,想着通过改模板改成h1的,发现很繁琐.今天发现,通过下载指定版本的next后,标题自动是h1的. 参考网页https://notes.iissn ...

  9. 《⑨也懂系列:MinGW-w64安装教程》著名C/C++编译器GCC的Windows版本(MinGW-w64在安装的时候可以选择版本,有图,一步一步)

    发布日期 2016年10月31日 分类 教程 标签 编程.软件 前言<⑨也懂系列:MinGW-w64安装教程>这篇文章由 rsreland (http://rsreland.net)于 2 ...

  10. telnet 的使用(ping 与 telnet)

    基本用法 >> telnet localhost 23 // 23 表示 telnet 服务的端口号,不写端口号也可以,telnet 默认绑定的端口号就是 23 // netstat -a ...