走過去的部落格

WINRAR + VB6 制作神奇的自动安装程序

给 EXG 服务器提供 CS:Source 容错包的傻瓜式安装包的时候,需要尽量做到以下条件:

  • 最后给玩家的必须是单个EXE
  • 自动读取游戏目录的位置
  • 一键安装
  • 不需要运行库,大部分windows系统都能跑

最初的设计是 .NET 来做,很快就暴露出了缺点。把 7z.exe 和 7z.dll 还有 css.7z 三个文件放一起打包进 EXE 里面。.NET 的好处就是自带功能多,自己设计了自动释放文件和后台运行 7Z.exe 。但是缺点也很快就来了,如果不后期安装过 .NET Framework 的话,XP不预装 .NET ,Win7 预装的是 .NET 3.5 ,Win10 预装的是 .NET 4.7 。.NET 的分水岭又恰恰在 4.0 这个版本,4.0以下的只能用 .NET 3.5 来运行, 以上的 4.0 都能兼容运行。 (5还没出呢)

所以给了两个文件给老板,一个 .NET 2.0 的和一个 .NET 4.0 的,分别适应 XP-WIN7 和 WIN8-10 两种。

后来老板说还是有问题(
最后我选择了 WINRAR 和 VB6 来做。

WINRAR 提供的自解压程序制作,可以做出很好的自解压程序,界面好看,支持打开就自动解压,解压到临时文件夹并自动运行某个程序,隐藏到后台自动运行等等。功能忒强大了。



然后 RAR 格式压缩的东西还是比 7Z 要大的,CSS容错包本身有 1.5G,RAR 要 715MB ,而 7Z 格式只需要 560MB 就可以了。

我用的是免费版 WINRAR ,幸好功能没有什么限制,不然我估计得掏钱才能做这种 EXE 了。

然后就是需要自动判断 GMOD 的安装位置,这个就很麻烦了。
如果是注册表读取的话,可以是可以,但是需要管理员权限才能阅读图中这些 steam app 的安装信息。

我也很不能理解为什么把他们设置为管理员才可以读写。
出于技术原因,这个注册表获得路径的方案被抛弃了。
我选择了让玩家运行一下游戏,玩家先运行游戏,我读取到路径后再安装就行。

然后放弃了 .NET 我就得用我会的其他办法来做了。Visual Basic 6 是我想到的最好的办法(Win95-Win10 全系统无需额外运行库随便运行)

最后做出来就是这样的流程:

最后给老板交货了(
一个 712 MB 的 EXE
但愿这回可以靠谱)