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

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

作者:傲慢与偏见

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

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

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

a969096f507c336e8373b696abceb59b.gif

1. 摘要

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

2. 操作演示

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

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

点击 Inno Setup Downloads[1] 下载:

753daf0d7a749762c9027b1892cd2172.png

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

b4d0cff38ce7a04395436fb795230043.png

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

c0c8f5ce4fd6da2efb08a53a69ae6c5a.png

2.2. 创建打包项目

f97f5ff70075d9926c6ef7c8b3e1c254.png

2.3. 填写应用基本信息

e666fa15fcdde441d1ac20f8e21b696c.png

2.4. 填写应用安装目录

3da09226815c3e5e3e2b231c6a9cc004.png

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

f5ac17f964e6426cb708dfea8940629b.png

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

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

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

2.7. 应用文件类型关联

43e2933861e8d33784a6c53557b0dd78.png

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

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

211576609d4a7a86c138d83f8595f912.png

2.9. 应用协议许可文件

645c25edb6504169b68575a666b62b31.png

2.10. 安装模式选择

f5fb59308b019e672907214e402c1101.png

2.11. 安装包语言选择

4c370c3bfd53d7a9c132dc15ca014d24.png

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

2.12. 安装包设置

2adbe71011374830c9c48b7bebcd362a.png

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

4d10eb89cbb00acf3f76d747a61d59f1.png

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

37aa623de4ad41376c5d989875ddad63.png

2.15. 安装效果

8ede6c2d8bdc23c8a9757f6ec551046e.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的安装目录拷贝一下放到工程目录

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

fe84a5275719db6dc99a4dcd803d50e6.png

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

c5bb138db55617e12a7dac23e20aaea5.png

参考命令:

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

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

4. 效果演示

eaf0b9cf85af73c7bc11e0056edd338f.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、付费专栏及课程。

余额充值