利用Inno Setup在VS编译时自动构建安装包

本文由网友投稿,.NET是免费、开源、跨平台的。

作者:傲慢与偏见

原文标题:利用Inno Setup在VS编译时自动构建安装包

原文链接:https://www.cnblogs.com/chonglu/p/17566940.html

欢迎网友们投稿技术类文章,题材不限,没有稿费...

7fbf16b9eedbea4bbb9932b2dd705d30.gif

1. 摘要

很多C/S开发领域的同学或多或少都可能会遇到需要制作安装包的场景,打包的工具也是五花八门,例如有NSIS、InstallShield、Wix Toolset、ClickOnce等等,这里以Inno Setup为例简单演示下如何构建安装包,以及在Visual Studio中编译程序时自动去构建这个安装包。

2. 操作演示

Tips:如果是想自动化构建,建议先从文章尾部开始看起,前面只是简单演示如何手动构建

2.1. 去官网下载Inno Setup打包工具

点击 Inno Setup Downloads[1] 下载:

fdfb3a7d47db8892575a5abc1f8e6942.png

如果有中文需求,则需下载中文包,下载地址:Inno Setup Translations[2]

4d5b1ddcd86d97c108b31d1d76286413.png

下载完手动放进Inno Setup安装目录下的Languages目录下即可

fe6a9e5f5cd91a1f84297a5ec50d4dbc.png

2.2. 创建打包项目

2c4bf976f69c1a92cb3603fce07e11a9.png

2.3. 填写应用基本信息

7b2eb5fa2f93a65c351dc732ce6fedd9.png

2.4. 填写应用安装目录

93c878ceb47dcde629bebed5885117d2.png

2.5. 在VS中右键项目属性,更改项目输出路径,有多个项目则都改为同一个

30aaabfa0ab916649541fd8477d49c05.png

2.6. 选择应用需要打包的文件

c4faab80a5731e7b20877c5904c309fc.png
  • Application main executable file: 应用程序主程序

  • Other application files: 主程序所依赖的项目或第三方依赖等,这里建议直接选择输出目录

2.7. 应用文件类型关联

98e28fea0c07b934d934f6f78c3ad541.png

若你程序用不上这个功能一般不用勾选。

2.8. 应用程序快捷方式创建

fc3e6e04d83ccf3a24cf0dafb30115cb.png

2.9. 应用协议许可文件

e0f570c9c960a06c4d7cfd17f6231fef.png

2.10. 安装模式选择

8f3959551ca7f1a2eb9705ed190860e8.png

2.11. 安装包语言选择

2f0097bfd0c46fecbf39aadc9c3a069f.png

官方默认是不提供中文语言包的,但官网上有第三方用户提供和维护了中文包,有需要的可以在 Inno Setup Translations[3]下载,然后手动放进Inno Setup安装目录下的Languages下即可,链接前面也提到过。

2.12. 安装包设置

9ec2fe531c48f4c33fc64d18ed608d17.png

2.13. 设置完了就会生成一个脚本

029b949944609c005861c92ba9802f6f.png

2.14. 编译完成,则会在目录生成一个exe文件,双击就可以进行安装

dac2f53c2d2cf33dd2869938ff9b63e4.png

2.15. 安装效果

9b48296384b87418dfd7c06ac6f8d46f.png

至此,一个简易的安装包制作完成。

但....这并不是本篇的主题。显而易见,如果每次程序有改动,就需要去Inno Setup的编辑器手动执行编译一下生成安装包,有些繁琐。

3. 自动化构建安装包

3.1. 修改刚才创建安装包时生成的脚本文件

主要是将绝对路径改为相对路径以及自动获取主程序文件版本等,避免其它同事/电脑编译时报错,可以参考下我的脚本

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "傲慢与偏见"
#define MyAppPublisher "版权信息"
#define MyAppURL "https://www.cnblogs.com/chonglu"
#define MyAppExeName "Inno SetupSample.exe"
#define MyAppVersion GetVersionNumbersString("..\output\Inno SetupSample.exe")

[Setup]
; #define MyAppVersion GetVersionNumbersString("E:\01-项目代码\YZS\KJT\trunk\KJT\bin\KJT.exe")
; 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={{72EC6D66-B10E-4E61-920F-86852D3FFA91}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={autopf}\KJT
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
; Uncomment the following line to run in non administrative install mode (install for current user only.)
;PrivilegesRequired=lowest
OutputBaseFilename=KJTStep
SetupIconFile=AppICon.ico
Compression=lzma
SolidCompression=yes
WizardStyle=modern
OutputDir=..\Publish

[Languages]
Name: "Chinese"; MessagesFile: "compiler:Languages\中文简体.isl"

[Files]
Source: "..\bin\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\bin\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

3.2. 把Inno Setup的安装目录拷贝一下放到工程目录

里面有些无用的可以删掉,减小体积,可以参考以下

c1376c1fde2804344f1d95f3fa3ea76b.png

3.3. 设置项目主程序生成后事件

7ff5558bbaf58f2e8562ec765b0a85f9.png

参考命令:

IF "$(ConfigurationName)" == "Release" (
    "$(SolutionDir)DevOps\InnoSetup\ISCC.exe" "$(SolutionDir)DevOps\InnoSetup\KJTStep.iss"
    start explorer /select,"$(SolutionDir)DevOps\Publish\"
)

为防止影响调试,可以加个判断,只有Release模式编译项目则执行命令,该命令的意思就是通过调用解决方案下的ISCC程序传入安装包脚本从而构建编译出一个最新的安装包,最后再调起文件资源管理器打开安装包目录。

4. 效果演示

de5500d164909f225eb26e2f619e298d.gif

每次需要发布新版本时,将解决方案切换为Release模式编译,F6 Build一下,安装包就自动生成出来了,这里只是抛砖引玉给个思路,可以多阅读下官方文档实现出更为完美的安装包。

Tips:为避免编写代码调试时编译速度过慢,最好还是要在生成后事件中加上Release模式的判断,当解决方案中有很多个项目时,或编译目录依赖文件过多的情况下,Inno Setup构建的会有点慢。

5. 结语

Visual Studio中的生成事件其实是一个很实用的东西,可以在编译前、编译后自动化执行一些经常需要人为手工操作的事,比如还可以利用生成后事件进行代码混淆,本篇文章就暂时不展开细说了。

如果在实际操作中遇到错误或有疑问,以及更好的建议可以在评论中交流..

6. 附录

  • Inno Setup官网:https://jrsoftware.org/

  • Inno Setup编辑器:https://jrsoftware.org/isdl.php

  • Inno Setup语言包:https://jrsoftware.org/files/istrans/

  • Inno Setup文档:https://jrsoftware.org/ishelp/

参考

[1]

Inno Setup Downloads: https://jrsoftware.org/isdl.php

[2]

Inno Setup Translations: https://jrsoftware.org/files/istrans/

[3]

Inno Setup Translations: https://jrsoftware.org/files/istrans/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值