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

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

安装Inno Setup。

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

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

  1. ; Script generated by the Inno Setup Script Wizard.
  2. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
  3.  
  4. #define MyAppName "My Program"
  5. #define MyAppVersion "1.5"
  6. #define MyAppPublisher "My Company, Inc."
  7. #define MyAppURL "http://www.example.com/"
  8. #define MyAppExeName "MyProg.exe"
  9.  
  10. [Setup]
  11. ; NOTE: The value of AppId uniquely identifies this application.
  12. ; Do not use the same AppId value in installers for other applications.
  13. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
  14. AppId={{AC02AFFF-0E81-4E48-AF82-FB09D7BA9F3E}
  15. AppName={#MyAppName}
  16. AppVersion={#MyAppVersion}
  17. ;AppVerName={#MyAppName} {#MyAppVersion}
  18. AppPublisher={#MyAppPublisher}
  19. AppPublisherURL={#MyAppURL}
  20. AppSupportURL={#MyAppURL}
  21. AppUpdatesURL={#MyAppURL}
  22. DefaultDirName={pf}\{#MyAppName}
  23. DisableProgramGroupPage=yes
  24. OutputBaseFilename=setup
  25. Compression=lzma
  26. SolidCompression=yes
  27. ArchitecturesInstallIn64BitMode=x64
  28.  
  29. [Languages]
  30. Name: "english"; MessagesFile: "compiler:Default.isl"
  31.  
  32. [Tasks]
  33. Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
  34.  
  35. [Files]
  36. Source: "MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
  37. Source: "libmysql.dll"; DestDir: "{sys}";Check: not Is64BitInstallMode
  38. Source: "libmysql.dll"; DestDir: "{sys}";Check: Is64BitInstallMode
  39. Source: "htmlayout.dll"; DestDir: "{sys}";Check: not Is64BitInstallMode
  40. Source: "htmlayout.dll"; DestDir: "{sys}";Check: Is64BitInstallMode
  41. ; NOTE: Don't use "Flags: ignoreversion" on any shared system files
  42.  
  43. [Icons]
  44. Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
  45. Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
  46.  
  47. [Run]
  48. Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

[Files]

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

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

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

我给出一个示例写法:

  1. [Registry]
  2. ;Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Providers\{{6f45dc1e-5384-457a-bc13-2cd81b0d28ed}"; Flags: deletekey
  3. Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Provider Filters\{{FF032558-38DA-4472-B969-31A636B7E5C7}"; ValueType: string; ValueName: "";ValueData:"SampleAllControlsCredentialProvider";Flags: uninsdeletekey
  4. Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Providers\{{FF032558-38DA-4472-B969-31A636B7E5C7}"; ValueType: string; ValueName: "";ValueData:"SampleAllControlsCredentialProvider";Flags: uninsdeletekey
  5. Root: HKCR; Subkey: "CLSID\{{FF032558-38DA-4472-B969-31A636B7E5C7}"; ValueType: string; ValueName:"";ValueData:"SampleAllControlsCredentialProvider";Flags: uninsdeletekey
  6. Root: HKCR; Subkey: "CLSID\{{FF032558-38DA-4472-B969-31A636B7E5C7}\InprocServer32"; ValueType: string; ValueName:"";ValueData:"SampleAllControlsCredentialProvider.dll";Flags: uninsdeletekey
  7. 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. [Thu, 9 Jul 2015 ~ Tue, 14 Jul 2015] Deep Learning in arxiv

    这一期的神作论文有蛮多的,都很有意思. Feature Representation In ConvolutionalNeural Networks 该论文中论述了在某种CNN结构下,是否有准确率较高 ...

  2. Erlang 聊天室程序

    Erlang 聊天室程序( 一) Erlang 聊天室程序(二) 客户端的退出 Erlang 聊天室程序(三) 数据交换格式---json的decode Erlang 聊天室程序(四) 数据交换格式- ...

  3. Expression Blend 的点滴(4)--创建类似iPhone屏幕锁控件(下)

    原文:Expression Blend 的点滴(4)--创建类似iPhone屏幕锁控件(下) 接着上篇... 接下去,将一步步演示如果创建当点击checkBox后,其中的按钮由左边滑动到右边,表示处于 ...

  4. PyCharm 重构(refactor)快捷键

    提取变量(比如一个函数会返回一个变量值):ctrl + alt + v(v:variable) 将某段代码封装为一个函数(函数+函数调用):ctrl + alt + m(m:method)

  5. 学习鸟哥的Linux私房菜笔记(12)——系统监视2

    四.控制进程 kill :语法 kill [-signal] PID     向进程传送一个特定的讯号,默认为15(终结) kill -l  :列出所有可以由kill传递的讯号 1 :重启进程 2 : ...

  6. Visual Studio 2017 and Apache Cordova mobile apps | Andrés Zsögön

    原文:Visual Studio 2017 and Apache Cordova mobile apps | Andrés Zsögön 以下是使用Microsoft Visual Studio 20 ...

  7. 十个最有“钱景”的IT技能, 你掌握了哪个?

    IT行业的失业率仍然徘徊在历史低点,其中某些岗位(如网络和安全工程师和软件开发商)的失业率在1%左右. Robert Half Technology最近的一项调查显示,大多数CIO将扩大IT团队或专注 ...

  8. 什么是“恶意代码”——————【Badboy】

    恶意代码是一种程序,它通过把代码在不被察觉的情况下镶嵌到还有一段程序中,从而达到破坏被感染电脑数据.执行具有入侵性或破坏性的程序.破坏被感染电脑数据的安全性和完整性的目的. 按传播方式,恶意代码能够分 ...

  9. win7 UAC bypass(微软已经给予了三组组件绕过UAC启动的特权)

    fireworm同学的翻译: 原文在http://www.pretentiousname.com/misc/win7_uac_whitelist2.html我只翻译了其中关于原理的一小部分,有兴趣的可 ...

  10. javascript常用的基础函数或方法——写给新手的我(持续补充)

    1常用基础函数 alert函数:显示一个警告对话框,包括一个OK按钮.这就是传说中的警告框,此框一弹,世界就清静了.举例:   alert("我一旦出现,之前出现的就算了,我屁股后面你们就歇 ...