飞信是.net写的但是它可以不安装.net framework就可以运行
有人了解它是怎么实现的吗?

解决方案 »

  1.   

    但是具体实现不知道,里面的dll引用到我的工程里也有些东西会报错-_-# 
    不过本地数据加密的代码实在太脆弱了...
      

  2.   

    VMDotNet
    你可以看看里面FetionVM.exe的代码
      

  3.   

    对在目录下面有个VMDotNet目录
    client.config里有关配置
    <?xml version="1.0" encoding="utf-8"?>
    <ImpsConfiguration>
      <AppSettings>
        <add key="Version" value="2.2.0230" />
        <add key="BuildDate" value="2007-4-6 15:17:32" />
        <add key="LinkType" value="DotNetVM" />
      </AppSettings>
    </ImpsConfiguration>
      

  4.   

    貌似需要的库文件都已放到\VMDotNet\v2.0.50727\System 下了``而VMDotNet\v2.0.50727\v2.0.50727下放的应该是飞信的系统模块 打印 加密等``
      

  5.   

    但是它是如何让FetionFx.exe在自己的目录里查找那些库文件而不是到windows系统里去找的呢?
      

  6.   

    问题是不光引用dll的库,还有运行时需要垃圾收集器等一些东西,如何一块搞进来的。
      

  7.   

    我想到一个办法,一个项目本身自动引用了几个dll,比如system.dll,那么把这些dll拷贝到自己工程目录,然后再工程引用那里把原来自动引用的dll去掉,手动指向拷贝过来的dll,就像添加引用那样,其实这个方法原来就想到了,不过就是如上面说的,c#程序运行时不光引用dll里面的类,.net framework还类似于java虚拟机,有一些比如gc这样的功能,就不知道怎么搞了。
      

  8.   

    好像.net 的dll,运行库可以改的,可以自定义的
      

  9.   

    库是没问题的。没有装过任何.net framework就能运行?那比较神气了
      

  10.   

    用Xenocode可以实现,其实就是对.net程序加壳了。
      

  11.   

    Eclipse的rcp程序,在目录下自己放一个目录,里面是一些jre的基本文件就可以在没有装jdk、jre的 机器上运行
    这个原理应该是一样的
    不过不知道他是怎么实现的。
      

  12.   

    XenoCode可以把.net框架弄到exe里面去。这种功能的软件还有很多吧。只不过要钱就是了
      

  13.   

    ?? 没注意  是.net写的么?
      

  14.   

    FetionFx.exe 是.net写的``还有个100K左右的Fetion.exe``加了壳``nothing found貌似Fetion.exe这个应该是个"引导"程序``作用像是先检测系统有没有.net环境``然后把.net需要的文件"一并加载到系统中"```
    最后才调用FetionFx.exe ?我是想当然的``大家有什么其他看法``
      

  15.   

    另外vmdotnet下面的FetionVM.exe 应该为.net的虚拟机程序``什么语言写的``依然nothing found``怎么写的``不知道``找了找``网上没的下``
      

  16.   

    我们也想知道,大伙研究下,我们.net下的c#也是需要装环境,哎,真是麻烦的.不装net framework会省很多事
      

  17.   

    我只知道mscoree.dll这个"垫片"。她其实是非托管到托管的JIT入口。.net的exe文件其实没有向他宣称的那样包含了JIT程序,它需要利用系统安装的.net framework来编译的。普通的非托管程序使用mscoree.dll里面的功能也能编译.net的exe文件并且让他“动起来”。.net的exe文件就是一般的PE文件,只不过它的入口部分是固定的一段代码,就是调用JIT。他有一个特殊的段存放.net的伪代码。至于垃圾回收之类的都不是问题,都是库的一部分,只要可以编译,库加载都不是问题。真正编译部分乃是mscorpe.dll,mscoree.dll只是一个“垫片”,他是引出了一个Com对象和数个普通的DLL引出函数来提供服务的。我正在试验去掉mscoree.dll这个库的后果,并且尝试把它放到应用程序目录下的效果。可能还需要弄一大堆的其他的DLL才能最后搞明白吧。我真弄不懂,微软为啥不在过渡期推出这样的“简化”的随应用程序发布的库。其实VB以前也这样的,VB以前也是非可执行的伪代码,它的EXE文件的入口和.net的差不多都是访问编译器所在的DLL进行编译。
      

  18.   

    这里究竟有没有微软专家?!!!!难道.net的微软专家水平都这么菜!!!我为了这个问题问了无数的专家,都说不可能搞,结果呢?!!!!我今天下决心翻了一下,看雪学院的一本书,又看了一下《.net本质论》,又去MSDN看了看,大概弄明白了可能的方式。真是气死人了,这个破坛子里面的专家都这么菜!c#果然是鸟鸟的乐园!
      

  19.   

    说实话,今天看完了书,让我挺失望的,看样子微软压根没打算把.net往核心层里面搞。现在这种实现方式和以前的VB有多少差别?无非就是一个完善了许多的VB罢了,其他的都没改变。这样的一层抽象毫无价值!只有进入核心层才会有真正的价值,现在这么搞法,那么什么乱七八糟的安全属性、强名称、程序集签名都是扯淡!都是骗人的把戏!!!怪不得,那个谁谁,我就记得他写了《windows核心编程》会从支持.net改为反对了。那次我看了他的痛骂,我还奇怪,现在算是明白了,他说的还真有道理。气死了。没想到微软这么实现的托管和非托管的桥梁,什么玩艺!
      

  20.   

    顶BlueTrees(蜗牛) 的想法``
    但BS 他的态度``下面这个是你当初的帖子``
    http://community.csdn.net/Expert/topic/5501/5501913.xml?temp=.7842523飞信是实现了不安装framework``但他是做了一个VM(而且是不是他自己的还不知道)``那你是否为了不给用户装framework而去写个VM呢```什么是破坛子``我敢说至少你当初那个帖子里``大家给你的意见是善意的``更是很合理的``
    你说的mscoree.dll问题``既然自己还没验证这个说法``其他人也没有做过类似的``那我说``你现在还没有理由批评别人``尤其是全局否定的态度``甚至升到了论坛和一群人的高度``我觉得你这样很不对``
      

  21.   

    我在想,他用这种方式实现了非托管到托管,简直如同ASPack加了个壳!!!这种方式,根本毫无技术上的理由必须安装.net framework。他干吗就不在过渡期弄个简化的办法呢?!!!气死了,被微软的这种态度气疯了。
      

  22.   

    那么憎恨安装.net框架,就不用.net编写程序的能实现免安装.net框架。
      

  23.   

    他妈的这个壳还不如ASPack的,人家可是自带解压器的呢!他的这个乌龟壳,还非要去外部找个编译器来。咳!微软目前的这个策略,实在搞不懂。
      

  24.   

    不是我憎恨.net framework。是客户不爽。我觉得,他为啥要强迫大家一次性全部装完所有的framework呢?他干吗不让应用程序安装包附带一部分用到的库呢?这样随着安装的应用程序越来越多,库也就完善了,最后可以成为操作系统的一部分。就像早年的VB的库和MFC。我原来以为是不可克服的技术原因,其实不知道微软他妈的什么策略!
      

  25.   

    feition.exe是一个标准的win32 C++程序.
    feitionFx.exe是一个.Net程序.当fetion.exe启动时,首先检查注册表是否安装有.Net framework,如果没有,则新起一个porcess,调用FetionVm.exe,这也是一个C++程序,就是一个.Net虚拟机,这个虚拟机再即时编译FetionFx.exe,并运行它.实际上你可以用FetionVm.exe运行其他的.Net程序,就是把.Net程序名当作参数传进去就可以了.说白了就是feition自己写了个精简虚拟机fetionvm.exe,来执行真正的程序FetionFx.exe
      

  26.   

    当然,fetionvm.exe并不是完全自己写了一个虚拟机,它只是进行了一层包装.在环境变量上做了一些设置,真正调用的还是微软的虚拟机 mscorjit.dll
      

  27.   

    嗯,谢谢楼上的,我打算自己尝试写个程序用微软的JIT编译一下试试看。看样子有希望解决框架安装问题了。
      

  28.   

    System.dll 2.87M
    System.Windows.Forms.dll  5.07M
      

  29.   

    嗯,谢谢楼上的,我打算自己尝试写个程序用微软的JIT编译一下试试看。看样子有希望解决框架安装问题了
    -----------------------------------------------------------------
    呵呵.... 说实话... 如果是正版Windows,不存在这个问题,因为自动更新会安装.Net framework.
      

  30.   

    vc++ 与 c#/vb.net混编已经是一种趋势比如SQLLite
      

  31.   

    在一个安装了.net framework 2.0 简体中文版的机器上作了如下实验1、重起到安全模式
    2、用regsvr32解除mscoree.dll的类型库注册,运行.net 程序没有问题,说明程序并未使用mscoree.dll中的com对象。
    2、删除c:\windows\mscoree.dll,运行.net程序,称找不到dll,看来.net程序需要这个库。
    3、把mscoree.dll复制到.net程序所在目录,运行.net程序没有问题,
    4、删除c:\windows\microsoft.net\framework\v2.0.50727(这个数字其实是语言和版本)目录,运行.net程序报错。
    5、复制v2.0.50727目录到程序所在目录,运行程序,报错
    6、添加环境变量Path指向v2.0.50727目录所在新位置,运行程序报错
    7、在注册表中修改注册表项KYY_LOCAL_MACHINE\software\microsoft\.net framework\installroot\ 修改为v2.0.50727新位置所在父目录。运行程序,成功。从上面的步骤可以大致了解.net 程序是如何加载的。
      

  32.   

    以后.net框架都是系统自带的了,有谁会去管你是不是.net写的呢?就和以前的VB差不多,win98要把vb的那个库打进去,但到了win2000,系统自带那个库,更省事了
      

  33.   

    feition.exe只是个压缩壳  很好脱的
      

  34.   

    无意间看到了ndphlpr.vxd这个东西
      

  35.   

    这么多人回答,居然没有一个答在点子上,真是汗颜很简单,飞信购买了这个公司的产品,所以不需要.net框架即可运行http://www.remotesoft.com/linker/至于这个产品的原理,也不是一下二下可以说清楚了,有兴趣可以研究一下
      

  36.   

    类装载器负责将.Net类装载进内存并为它们 的执行做准备。
    装载前必须找到目标类。
    包括在 程序配置文件,Gac全局配件缓存,和PE文件中的元数据 中查找。加上上面老鸟的分析...
      

  37.   

    http://www.microsoft.com/taiwan/msdn/columns/DoNet/thinstall.htm
      

  38.   

    花了半天把FetionFx给反编译了一下,好多错,还是不能运行..有Xencode这个软件可以选择在加密的时候把.net framework打进去.试验没有成功.
      

  39.   

    感谢各位大牛的分析
    我的程序,已经用java写
    还把这个贴子搞忘老
    没想到这么多老大顶贴
    万分感谢
      

  40.   

    vb.net的程序,使用飞信里带的这个虚拟机运行成功,但还是有点小问题