文章分类

站点统计

  • 分类总数: 13 个
  • 文章总数: 145 篇
  • 评论总数: 47 条
  • 附件总数: 59 个
  • 建站日期: 2008-08-18
  • 访问总数: 472869 人次
  • RSS订阅: 文章|评论

通过飞信的FetionVM的.net虚拟机来加载.net程序,实现在未安装.net的机器上运行.net程序

Admin 于 2008-09-13 18:41:23 发表.Net

订阅: http://www.kaiyuan8.org/Feed/Article_45.aspx
引用: 点这里获取地址 (UTF-8)
精简出最小 jre < 通过飞信的FetionVM的.net虚拟机来加载.net程序,实现在未安装.net的机器上运行.net程序 > VirtualBox 2.0.2 发布

本来想把用C#写的程序重写移植到win32平台的,但是感觉重写好累,而且不是很熟练,就想着能不能在未安装.net的机器上运行,有需就有求,嘎嘎,百度了一会,已经有各位老大们已经在讨论用飞信的虚拟机平台来进行加载运行.net程序了,于是自己就想着去尝试着去做一下。
(PS:飞信的就是在.net平台上开发的,不同的是飞信做了一个.net虚拟机的平台,这样就能在非安装.net的机器上运行了)

由于启动文件要在win32上运行,所以就用了VC++6来进行写程序了,使用该启动程序来进行启动外部程序(我们的.net程序)

代码如下

  1. #include "stdafx.h" 
  2.  
  3. int APIENTRY WinMain(HINSTANCE hInstance, 
  4.           HINSTANCE hPrevInstance, 
  5.           LPSTR lpCmdLine, 
  6.           int nCmdShow) 
  7.  { 
  8.     //HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727 
  9.  
  10.     HKEY hKey; 
  11.     LPCTSTR path="SOFTWARE\\Microsoft\\.NETFramework\\v2.0.50727"
  12.     //打开注册表键,查看系统是否安装了.net Frameworkv2.0 
  13.  
  14.     LONG lResult=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,path,0,KEY_READ,&hKey)); 
  15.     ::RegCloseKey(hKey); 
  16.     if(!lResult==ERROR_SUCCESS)//若不是返回成功 
  17.     { 
  18.        WinExec("FetionVM.exe myapp.exe", SW_SHOW); 
  19.     } 
  20.     else 
  21.     { 
  22.         WinExec("myapp.exe",SW_SHOW); 
  23.     } 
  24.     return 0; 

通过读取注册表看看有没有安装.net2.0(net3.5增加了新功能,核心还是2.0,所以2.0就足够运行了),如果有,就直接运行了,就不使用虚拟机加载了。
然后把飞信的一些东东“借”过来用了哈,文件在D:\Program Files\China Mobile\Fetion\VMDotNet\v2.0.50727(把这个目录下的文件全部考走)
然后把这些文件和release的exe放到一起。
这些工作完成后,就可以进行打包了
安装包文件10M左右,对比过去单个exe的80Kb来说是大了不少,不过这样对于一个不想装190多M的.net库的人来说,很值了


飞信虚拟机运行.net 程序的方法在网上已经有很多文章了,就不再说了.
飞信虚拟机不太好支持数据库,这里就说一下让飞信虚拟机支持数据库的方法.
让飞信虚拟机支持使用Access的mdb数据库,即可以使用System.Data命名空间下的类和方法
2008年7月11日,作者exy337

需要使用以下6个dll.
1.System.Data.dll
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll
2.Microsoft.VC80.CRT.manifest
飞信安装目录可以找到(已经在虚拟机目录了,但还是要,具体原因就不知为什么了)
3.System.EnterpriseServices.dll
4.System.EnterpriseServices.Thunk.dll
5.System.EnterpriseServices.Wrapper.dll
在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\目录下
6.System.Transactions.dll
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Transactions.dll

这6个dll跟你的.net程序放一个目录就OK了.
比如说:
安装飞信2008后,找到安装目录,
留下 VMDotNet 目录 和 Fetion.exe ,其它全删除
你的程序改名为 FetionFx.exe ,相应的mdb数据库也复制过来.再把上面说的6个dll也复制过来.
双击Fetion.exe就可以运行你的程序了.

注:GdiPlus.dll(也可以拷到跟前面6个dll相同的目录,win2000缺少GDP+,有它才能运行)
飞信目录可以找到.
类似原因.在2000下运行,你可能还需要升级mdac.
net2.0需要的是mdac 2.6以后版本的.需2000自带的是mdac2.5版.
直接google.谷歌搜索mdac升级就可以找到一大把升级下载.

如果有什么疑问的,请加QQ群:56882399来讨论
这几天一直在想利用飞信虚拟机在没有装.net框架的电脑上,运行自己的程序,
却发现在他对数据库不怎么支持,经过几天的努力,找到了上面的方法,希望对跟自己同样问题的人有点帮助!

被阅1304次, 0投一票
  • 看完了要说点啥么?
  • 昵称 (不填说不了话)
  • 信箱地址 (不会被公开,但是不填也说不了话)
  • 网址 (这个不填也成)
Powered by MiniBoke v2.0.0.8 Build 0828

Copyright © 2008 开源吧!. All rights reserved.

粤ICP备07500939号