有同学问我,我们公司做的CSharp项目为什么不直接打包成安装包,而是直接把编译目录直接给客户用?做了那么久CSharp,据我的了解,大多数CSharp项目都不会采用安装包的方式给客户用。

打开网易新闻 查看精彩图片

软件定位不同

一般来说,采取安装包的CSharp项目基本都是标准项目,所谓的标准项目意思就是软件在谁手里,功能都是一样的。常见的像QQ、360、Photoshop这样的面向普通大众的软件,它们采取的就是安装包的形式,基本上每个用户所使用的功能都一样。

这并不是说像我们公司这种定制化程度比较高的项目就不能做成安装包,而是有很多其他因素。

首先就是CSharp项目大多数都是PC项目,像我们公司这种开发面向企业内部、面向生产的软件,定制化程度比较高,且甲方要求比较多的情况下,会造成软件需要频繁更新的情况。

安装包比较大

因为PC项目一般都比较大,如果直接使用安装包的形式会导致需要重复下载的情况。

像我之前做ERP软件的公司,整个软件总大小就有5个多G,如果每次都把软件打包成安装包的话,下载起来会比较慢。

因此,一般通俗的做法是做热更新,即在软件的服务端做一个更新文件夹,每次软件在启动的时候,会检查服务端的更新目录,只检查软件目录的差异项文件进行更新,因此,打包成安装包就没有必要了。第一次使用软件的时候,只需要下载一个伪可执行文件(exe),这个可执行文件主要功能就是下载软件所需要的所有文件,这个伪可执行文件会在整个软件下载完毕以后被删除,替换成真正的可执行文件。

因此,您会发现,很多看起来比较大的软件,您在下载这个软件的安装包的时候,安装包通常就几M,但是安装完毕后,安装目录却很大,像这种安装包,我们就称之为“伪可执行文件”。

这样做的优点就是“安装包”小,后期只更新差异项,更新速度快,缺点就是在安装时需要连接服务器,与之相反的就是离线安装包。

我们有时候去下载一些软件,软件光安装包就好几个G,那是因为这些软件是支持离线安装的,即软件的所有文件都包含在安装包内,即使是服务端离线的情况下,也能安装软件的完整版本。

像我们公司这种PC软件项目,如果每次都给客户一个完整安装包,显然不现实,所以一般我们还是做热更新。

软件网络原因

但是,很多情况下,我们甚至连热更新都不做,直接把编译目录(Release)直接发给客户使用,这是为什么呢?

举个例子吧,我们公司现在的客户大多数都是工厂,工厂的设备基本上只连内网,且可能每个工作间之间网是不互通的,因此,做热更新没有意义,除非客户愿意给我们开放网络(大多数情况下不可以)。

而且,很多我们给很多工厂做的软件都是单机软件,本身就不具备联网功能,如果单纯得为了实现热更新而设置一个软件服务器,其实很多工厂是不愿意的。如果直接发送完整安装包给客户,那么如果软件较大的情况下,每次客户都要重新下载一下完整安装包,比较麻烦。

因此,大多数工厂软件,我们还是选择直接把编译目录压缩成压缩包发给客户,且如果做局部更新的话,只把对应模块的文件发给客户,让客户自己更新或者我们帮他们更新,最多就第一次使用安装包。

结语

所以,直接发编译目录给客户,并不是我们不愿意把软件打包成安装包,而是很多现实情况导致的,如安装包一般比较大、热更新效率会比较高、客户网络不支持热更新等等。

当然,一些比较小的软件,直接发编译目录也比较省事,因此也无需使用安装包!