先说废话 很多朋友对我写的这个系列的第五篇比较感兴趣:http://www.cnblogs.com/liulun/archive/2011/12/08/2280110.html 因为我承诺第五篇就公布源码了,但是与第五篇相关的代码我还没有完成, 现在又花了一个周末的时间来写这篇文章 原谅我吧~ (如果你觉得这篇文章更有吸引力的话~那另当别论)
索引:
DotNet4应用程序打包工具->升级版【三】宿主程序分析 全部源码下载
DotNet4应用程序打包工具->升级版【二】安装工具分析
DotNet4应用程序打包工具(把DotNet4安装程序打包进你的应用程序;WINAPI开发,无dotNet环境也可顺利执行)【一】整体思路
好了~言归正传!
先来张图片!
以升级为如下:
1:缘起
在09年的时候为了解决斯克迪亚的问题
写了这个工具的简易版:http://www.cnblogs.com/liulun/archive/2009/12/18/1627313.html
那篇文章写的实在是太简易了~
主要是因为.NET 3.5的包太大,打包到应用程序中去,太怪!所以就没有深入做这个工作
最近小洋(燕洋天)又提到这个问题~
考虑到现在.Net 4 x86只有二十几兆;(x86andx64才四十几兆)
如果能打包到应用程序中去,就美多了
于是写了这个工具。
2:分析
别看这个工具小(只有三个按钮一个文本框)
其实他里面包含了三个程序
第一个就是你看到的这个图片所展示的应用程序
我们叫他“打包工具”
第二个和第三个程序是作为资源放在“打包工具”里的
第二个程序是dotNet4的安装包
第三个程序负责判断客户端是否有dotNet环境
我们叫他“宿主程序”
下面我们就分别说说这三个程序的逻辑:
2.1打包工具
选择好您的应用程序(我们叫他“目标程序”)
点开始打包后
“打包工具”先把“宿主程序”释放到“目标程序”的相同的目录下
然后得到“目标程序”的图标ICON资源
然后把“宿主程序”的图表ICON资源替换掉
然后把整个“目标程序”当作资源添加到“宿主程序”中
然后“打包工具”把自身的dotNet安装包资源也添加到“宿主程序”中
至此打包成功
2.2宿主程序
宿主程序的逻辑稍微多一些
在打包成功,把打包后的“宿主程序”分发到客户电脑上之后
客户打开宿主程序
先检查注册表,看客户环境是否安装了dotNet4应用程序
如果没有安装
释放dotNet安装包资源(打包时加入进去的)
执行dotNet安装包程序,等待安装进程执行完成
安装完成后,再次检查注册表
如果顺利通过检查
就释放目标程序
然后执行目标程序
等待目标程序进程执行完成
执行完成后,删除释放的dotNet应用程序和目标程序
然后“宿主程序”退出
3:后记
3.1为什么不静默安装dotNet4
虽然可以做到的
但是
第一dotNet4安装过程中可能会有很多情况发生
要处理很多逻辑,做起来太复杂,
比如:阻滞的问题:http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=1385
第二客户端环境会报毒
3.2为什么在目标程序执行完成后要删除目标程序
我假定您打包的“目标程序”就是一个安装包
而且这个安装包的扩展名是.exe
一个安装包程序
基本的功能应该有安装、卸载、创建桌面图表等等
所以我执行了一次您的安装包~
以后的事情就让您自己做吧~
3.3我会公布源码的
虽然我对C和winapi都是一知半解
但我愿意公布源码~
在接下去的这个系列的几篇文章中会陆续公布源码
3.4程序可能会有问题
我是在WIN2008的机器上开发的这个程序
在WIN2003的机器上测试了这个程序
开发和测试都是64位环境
现在也深夜了~没有人帮我测试~
如果有问题,我会尽快搞定的~
3.5先发布编译版本
由于已经把DotNet4安装包编译到程序里面去了比较大~
就没有传到博客园服务器上来