╃苍狼山庄╃╃苍狼山庄╃

Clang出品,
必属精品!

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

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

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

#include "stdafx.h"

int APIENTRY WinMain(HINSTANCE hInstance,
         HINSTANCE hPrevInstance,
         LPSTR lpCmdLine,
         int nCmdShow)
{
   //HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727

   HKEY hKey;
   LPCTSTR path="SOFTWARE\\Microsoft\\.NETFramework\\v2.0.50727";
   //打开注册表键,查看系统是否安装了.net Frameworkv2.0

   LONG lResult=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,path,0,KEY_READ,&hKey));
   ::RegCloseKey(hKey);
   if(!lResult==ERROR_SUCCESS)//若不是返回成功
   {
      WinExec("FetionVM.exe myapp.exe", SW_SHOW);
   }
   else
   {
      WinExec("myapp.exe",SW_SHOW);
   }
   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命名空间下的类和方法

需要使用以下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升级就可以找到一大把升级下载.

本原创文章未经允许不得转载 | 当前页面:╃苍狼山庄╃ » 通过飞信的FetionVM的.net虚拟机来加载.net程序,实现在未安装.net的机器上运行.net程序

评论

文章评论已关闭!