接上一篇

【.Net Framework 体积大?】不安装.net framework 也能运行!?开篇叙述-1

  昨天写了一个引子,还是有读者对这套“小把戏”感兴趣。那么不辜负大家的希望,争取博主不做太监........

  注意:笔者不想谈Link的方式,虽然很爽,但是不靠谱。毕竟解析翻译到原生的应用,微软到现在也就敢在Xaml系的应用做尝试,不知道是微软的策略,还是自身都信心不大......

  至于Mono项目,笔者就不说它了,BUG真的多的一个接一个的,甚至2.0都过去了,3.0还没有修复。虽然它可以支持Link ,mkbundle 工具,但是bug太多,不小心就是一个雷......

  开篇先谈下原生的应用和虚机应用。

  Native的程序,大多基于特定的平台硬件系统的,这里的系统 我们就说三大主流系统中的Win/Mac/Linux。硬件部分嘛,主要是CPU的类型...原生应用跟随操作系统的兼容性,可以类似插入内存条一样,直接跟系统集成,运行速度快,处理数据速度效率高。开发语言:C/C++  汇编?(呵呵,这都上个世纪的东东)  。基于C/C++ 衍生出来 主流的 QT VC .....VC 里有衍生出个MFC。。。。。。。

  虚机应用,这类应用大多是基于虚机运行时,也就是将运行时 Run time SDK 安装到适配的操作系统后,SDK将硬件 操作系统的不同 进行了自适应。应用开发者,只需要关注程序的运行效果。就好像坑坑哇哇的石头墙,摸了一层水泥,然后上面可以搭载各种形状的石头,而不是特定形状的石头(去适应石头缝大小形状)。特点是:平台适应强 开发速度快 迭代周期缩短...。开发语言:Python Java .net Framework node.js .......

  虚机应用,又各自有各自的特定。有的是基于脚本执行,有的是强类型的编译执行。不过大同小异。都离不开运行时!!!

  其他语言的运行时,我们不谈,有兴趣,自己研究。我们专门谈一下.net 的运行时 .net Framework.

  特点:微软开发,大品牌。体积大,不能说大,简直是巨大!前面说了,从2.0 的几十兆 到3.5的几百兆 到4.0又回到几十兆(但是安装速度真慢的要命,因为要先自解压)。前面说了,十分佩服微软的 cab 压缩,愣是把一个几百兆的.net 4.0  压缩到了几十兆!!!4.5 4.6也都是4系列的。主版本号不变,改变次版本号,说明只是基于4的补丁,但是要亲命的是 4.5 抛弃了XP!!!!XP 啊,提到XP 就好像前端开发者对着IE6那个时代!!! 虽然痛苦恐怖,但是,XP在国内的使用群体依然大的离谱。

虽然 Win7普及的效果不错,但是那毕竟是XP 啊  XP 啊 ............泪奔。

所以,笔者认为 .net 4到目前为止 是兼容最全面的Win 系列的系统。对于开发者来说 4版本无疑是一个划时代的东东,各种应用框架都有,而且性能比3.5好,而且体积小了好多。但是仅仅是相对小了。笔者认为,它依然巨大。相比较 Python Ruby Node.js Lua的运行时,都小巧,安装速度快,运行速度也可以。凭啥.net 这个鬼 体积那么大!??

其实是有原因的。如图:

C:\WINDOWS\Microsoft.NET

这个基本就是.net 的运行时集中营了(虽然在System目录也打入了其他的dll,后面说)

看到这里,我们就需要回忆下,.net 的自身的架构

2.0

3.5

4.0

上图来自:http://www.cnblogs.com/xiaopin/archive/2011/01/07/1929467.html

是不是类似搭积木的方式,一块块的耦合上去的?确实,一个完整的.net framework安装包,需要把整个积木架构搭建起来。但是大多数情况下,我们只需要积木的台子,也就是到 第一个图中的程序集那一层就完事,有GAC  有运行时 ,就足够我们把程序集通过系统引导到 CLR 运行时解析 IL 中间语言到当前平台的原生代码,并执行原生代码。相当于,我们只需要雇佣一个翻译,会翻译其他语言即可,没必要长得高大威猛帅。。。。

  那么我们能把上面的枝枝叶叶修建掉么?笔者测试是可以的。

  我们只需要把GAC 的相关程序集,还有运行时即可。然后就是特定的引导目录+注册表。

  笔者没有找到.net 程序引导的顺序,不过从笔者实验的结果来看。微乳打包的程序的时候,给程序集打上了特殊的标识。然后由系统注册表注册的特定应用去解析程序集。类似指定默认程序一样的效果(不知道表述是否正确,欢迎大家指正)。

  好,既然是指定的注册表来注册引导程序,那么哪个才是The One? 不卖关子,直接给答案!

  注册表:SOFTWARE\Microsoft\.NETFramework\

  这个注册表项,有一个安装路径的项,指定到.net的运行时目录。笔者的机器是64位机器,x86的机器就没有64.

然后,注册完路径后,还有它下面的一个注册表键值对:policy

注意其中的键值对:

这个支持策略,类似设计模式中的策略模式。根据特定的场景,使用特定的策略支撑。我们注册4.0后,自然也就支持.net 4.0。

  好,注册表关键就这2个,接下来还有关键的一个步骤,在系统目录

一个是箭头指向的dll  还有一个

100那个是4.0的 120那个是笔者安装了 VC 分布包的 VC++2013的。我们需要的是上面的那个哈。。。

好,把这两个程序集 在特定的机器上,也打入进去后,好,我们的精简版本的.net framework就完成了!!

然后,还可以在运行时程序集 目录下,裁剪不需要的程序集 比如什么 exe的小工具啊 WCF 啊 WPF啊什么的。最终就可以粗来一个体积小巧,性能不错,支持.net 4.0的运行时了。

也就是上面的3步走,有兴趣自己尝试,有疑问,请评论留言。笔者不会发布完整的小安装包。版权的问题很蛋痛 呵呵,Congratulations..............

  啰嗦一下,为什么添加注册表就能访问策略进行引导,跟.net的历史有关系吧,因为XP系统上面,就已经集成了1.X的.net framework.后续系统Vista win7 server03 08 等等也一样。所以,注册个版本号,也就可以识别粗来了。。。。。

  注册表献上:

Root: HKLM; Subkey: "SOFTWARE\Microsoft\.NETFramework";Permissions:admins-full; ValueType: string; ValueName: "InstallRoot"; ValueData: "{win}\Microsoft.NET\Framework\";Check:WebServerRuntimeNotInstall

Root: HKLM; Subkey: "SOFTWARE\Microsoft\.NETFramework\policy\v4.0";Permissions:admins-full;Check:WebServerRuntimeNotInstall

Root: HKLM; Subkey: "SOFTWARE\Microsoft\.NETFramework\policy\v4.0"; Permissions:admins-full; ValueType: string; ValueName: "30319"; ValueData: "30319-30319";Check:WebServerRuntimeHasNotV4SubKey

不要问我,上面是什么鬼,inno setup 又是什么鬼。尽情享用吧.........

  

【.Net Framework 体积大?】不安装.net framework 也能运行!?原理简介-2的更多相关文章

  1. 【.Net Framework 体积大?】不安装.net framework 也能运行!?开篇叙述-1

    [声明:请尊重作者micro-chen的原创,抓文章,请添加来源和作者署名.作者保留追责权利.......] 写在前言 看着日渐没落的.net ,心里多少有了点悲凉.国内的越来越多的新兴公司 都是JA ...

  2. 【.Net Framework 体积大?】不安装.net framework 也能运行!?原理补充-3

    继续补充点吧.接上一篇,我们实现了.net framework的精简的步骤. 有网友评论了,那个核心的 mscoree.dll 从.net framework 2.0开始,微软开始了新的CLR承载模型 ...

  3. 安装.NET Framework组件时,电脑意外重启后再次安装失败

    因为软件运行环境需要安装.Net Framework,我安装的是2.0sp版本,可以安装过程中计算机意外关闭,重新打开后再次安装却出现安装失败的提示,具体内容是: 产品: Microsoft .NET ...

  4. C# winform程序免安装.net framework在XP/win7/win10环境运行!(转)

    C# winform程序免安装.net framework在XP/win7/win10环境运行!   前文: 首先感谢群里的大神宇内流云 提供的anyexec for windows版本. 经过本人搭 ...

  5. NSIS:判断并安装.NET Framework 4 的例子

    原文 NSIS:判断并安装.NET Framework 4 的例子 现在.NET开发的软件已经大行其道,但有些操作系统并不符合软件的运行要求,所以,我们需要在安装程序中进行.NET Framework ...

  6. Win10无法安装.net framework 3.5出错提示无法安装以下功能该怎么办?

    在Windows操作系统中,.NET Framewor对今天应用程序的成功提供了的安全解决方案,它能强化两个安全模型间的平衡.在提供对资源的访问,以便以完成有用的工作,对应用程序的安全性作细致的控制以 ...

  7. Windows 10 安装 Sql Server 2014 反复提示需要安装 .NET Framework 3.5 SP1 的解决方案

    一.首先安装.NET Framework 3.5: 离线安装方式: 1.装载相对应的系统安装盘,我是Windows 10 x64 企业版,所以装载Windows 10 x64 企业版安装镜像ISO,盘 ...

  8. Entity Framework 教程——安装Entity Framework环境

    安装Entity Framework环境 Entity Framework 5.0 API分布在两个地方,一个可在NuGet包管理器中找到,一个存在于.NET framework中..NET fram ...

  9. 安装.NET Framework进度条卡住不动的解决方案

    VS在安装之前需要安装.NET Framework,我安装的是4.0版本.但是安装进度条到一半左右时就卡住不动了.前前后后重试多次,还有几次重新开机,但都没用. 开始还以为是安装的系统有问题.后来在网 ...

随机推荐

  1. POJ3259负环判定

    题意:有n个顶点,m条边,然后有w个洞,过每个洞的时间为-ti,求是否会时光倒流 分析:就是求是否存在负圈,用Bellman-Floyd判定是否存在负圈即可,注意是无向图,所以路径是双向可达的 #in ...

  2. 【转】Linux 上的最佳 C/C++ IDE

    IDE介绍收藏篇: 个人linux下开发经验不多,一般也都使用shell远程连接使用命令行模式开发.如果自己在自己机器上开发还是有IDE要方便很多,看到这篇帖子就果断的转过来先收藏下,之前自己使用过E ...

  3. js 设置url 参数值

    //设置url中参数值 function setParam(param,value){ var query = location.search.substring(1); var p = new Re ...

  4. 思迅/泰格/科脉/收银软件/商超软件数据库修复解决断电造成损坏的mdb\dat文件SQL数据库 置疑 修复 恢复

    拥有专业管理软件数据库修复技术工程师,专业提供管家婆.美萍.思迅.科脉等管理软件技术服务,电脑维修\重装系统技 术服务.无法登陆打不开等出错问题处理(连接失败,请输入正确的服务器名,SQL Serve ...

  5. webgl 网站demo

    网络上的一些经典的WebGL资源网站和WebGL开源引擎整理 http://www.babylonjs.com/ http://threejs.org/ http://www.finalmesh.co ...

  6. iOS 之 微信开发流程

    第1阶段 注册开放平台帐号 注册成为微信开放平台开发者 立即注册 认证开发者资质 开发者资质认证通过后才可申请微信支付,申请审核服务费:300元/次 立即认证 创建APP并提交审核 提交你的APP基本 ...

  7. event.returnValue和return false的区别

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. 让表格table呈现边框,不用给tr、td加边框的写法

    <table width="100%" cellspacing="1" cellpadding="1" bgcolor="# ...

  9. HDU-1701-ACMer

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1701 解题: 好久没做题,好久没写解题思路了,连简答题都不会做了,下午的月赛挂了,我悲剧了,在此发牢骚 ...

  10. C# 从字符串向 datetime 转换时失败

    更改电脑的日期类型即可,把短日期和长日期修改下面的样子即可: