先说废话

很多朋友对我写的这个系列的第五篇比较感兴趣: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安装包编译到程序里面去了比较大~

就没有传到博客园服务器上来

如果您对这个程序感兴趣

点击推荐后在评论里留下您的邮箱

我会在今天晚上六点之后统一发邮件给大家

注意:截至时间是2011年12月12号晚六点整~

这个时间点之后填写的邮箱我就不再发送了~

见谅

请大家统一把邮箱中的@符号替换成#号(避免邮箱地址被采集)

DotNet4应用程序打包工具(把DotNet4安装程序打包进你的应用程序;WINAPI开发,无dotNet环境也可顺利执行)【一】整体思路...相关推荐

  1. 再聊inno 打包工具之关于安装或者卸载时判断程序是否在运行

    再聊inno 打包工具之关于安装或者卸载时判断程序是否在运行 废话少说,show my code [code] //安装和卸载时检查程序是否运行,拷贝代码修改AppName和AppId functio ...

  2. python 打包 .app 运行 控制台窗口_Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法...

    windows系统下安装Pyinstaller cmd下输入指令 pip install PyInstaller Pyinstaller的使用 进入需要打包的目录下,执行打包命令 Pyinstalle ...

  3. Linux下开源打包工具fpm的安装与使用(超详细)

    Linux下开源打包工具fpm的安装与使用 一.fpm概述 二.fpm的安装 1.安装ruby环境 2.安装fpm 三.fpm的使用 1.fpm常用参数 2.举例要求 3.准备目录 4.编写脚本文件 ...

  4. 用JEP 343打包工具,构建自包含、可安装的Java应用程序

    OpenJDK社区发布了JEP 343:打包工具的早期访问版本.JEP 343:打包工具,又名jpackage,是打包自包含Java应用程序和Java运行时环境的新工具.这个基于JavaFX java ...

  5. vs 2012自带打包工具进行部署安装

    原文 http://www.cnblogs.com/javawebsoa/archive/2013/04/05/3001632.html#2667832 使用vs2012做的程序,程序做完后准备打包部 ...

  6. python打包工具哪个好用_python打包工具比较

    前一段用python写了点小工具,希望能给同事用,这里总结一下python的打包以及构建的方法. 首先是一些需要安装依赖包的方法,这也是比较推荐的正统的方法. 1.setuptools or pip ...

  7. linux apk 打包工具,linux下apk批量打包

    1.思路 整个思路就是,把需要修改的参数以的方式定义在项目的AndroidManifest.xml文件中,具体参数如何获取及具体用法这儿我就不多说,然后打包好一个完整的apk包作为参照包.然后用pyt ...

  8. linux rom打包工具,Android rom解包打包工具

    eMMC主要是针对手机和平板电脑等产品的内嵌式存储器,由于其在封装中集成了一个控制器,且提供标准接口并管理闪存等优势,越来越受到Android手机厂商的青睐,以eMMC为存储设备的android手机, ...

  9. linux程序测试工具gprof,gprof-如何在Linux上分析多线程C ++应用程序?

    gprof-如何在Linux上分析多线程C ++应用程序? 我曾经使用gprof进行所有Linux分析. 但是,对于我的多线程应用程序,它的输出似乎不一致. 现在,我将其挖掘出来: [HTTP://S ...

最新文章

  1. mysql切换到使用openssl_OpenSSL可以用来调试到MySQL服务器的SSL连接吗?
  2. mysql查询表的列名主键_SQl查询数据库表名、表的列名、数据类型、主键
  3. Spring Context 你真的懂了吗?
  4. js高级程序设计--AJAX JSON
  5. Golang 单元测试:有哪些误区和实践?
  6. php数据访问(查询)
  7. 云鹊医认证审核需要多久_ISO9001质量管理体系认证审核需要准备哪些资料
  8. Installing specific major Java JDK versions on OS X via Homebrew
  9. ASP.NET2.0的快速入门站点
  10. spark稀疏向量与稠密向量
  11. sqlserver修改实例名
  12. 如何永久的关闭macOS 更新提示?
  13. 【JavaScript脚本编程技术详解-----(一)】
  14. 软件测试 | 测试开发 | Git分支管理搞定在线合并和本地合并
  15. java.io.NotSerializableException错误解决方法
  16. java红宝石是哪本_以月/年红宝石显示帖子
  17. Matlab自带的分类学习工具箱(SVM、决策树、Knn等分类器)
  18. Qt 添加 QtNetwork 库文件(包括vs中和qt中)
  19. ch01变量和数据结构
  20. Python爬虫实战:手把手教你 字体反爬 CSS反爬练习 猿人学比赛题目四题详解

热门文章

  1. phpcms9-6-0 一键getshell工具
  2. 客户端控件调用服务器的参数
  3. C#使用Mutex实例详解
  4. mfc中主窗体显示(任务栏上方显示)
  5. dotNetCharting使用总结
  6. C++中的各种预处理的表示
  7. 非阻塞模式(ioctlsocket)
  8. 多线程—AQS独占锁与共享锁原理
  9. android 弹出菜单 toast,Android学习第二天:Toast(提醒)、Menu(菜单)、Intent的显式和隐式(包括打开、适配网站,调用拨号界面等)...
  10. 职校计算机课堂评课标准,中职学校计算机专业课堂教学评价(共2323字).doc