现在的位置: 首页 > 综合 > 正文

不装.net Framework 也能运行WinForm程序,用飞信(转)

2012年04月24日 ⁄ 综合 ⁄ 共 1890字 ⁄ 字号 评论关闭

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

PS:飞信的就是在.net平台上开发的,不同的是飞信做了一个.net虚拟机的平台,这样就能在非安装.net的机器上运行了)

开始动手^_^

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

代码如下

// 文本隔行加亮2.cpp : Defines the entry point for the application.

       //

      #include "stdafx.h"

      int APIENTRY WinMain(HINSTANCE hInstance,
                  HINSTANCE hPrevInstance,
                  LPSTR lpCmdLine,
                  int nCmdShow)
     {
       // TODO: Place code here.

        //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)//若不是返回成功
        {
            //MessageBox(NULL,"由于是用飞信的.net虚拟机加载启动的\n所以启动会有点慢,请稍候几秒钟\n\n请\"确认\"后继续","Hello",MB_OK);

       WinExec("FetionVM.exe 文本隔行加亮.exe", SW_SHOW);
        }
        else
        {
            WinExec("文本隔行加亮.exe",SW_SHOW);
        }
        return 0;
    }

代码不多说了,注释里都有,通过读取注册表看看有没有安装.net2.0net3.5增加了新功能,核心还是2.0,所以2.0就足够运行了),如果有,就直接运行了,就不使用虚拟机加载了。

然后debug没有什么错误之后,release下,

然后把飞信的一些东东“借”过来用了哈,文件在D:\Program Files\China Mobile\Fetion\VMDotNet\v2.0.50727(把这个目录下的文件全部考走)

然后把这些文件和releaseexe放到一起。

这些工作完成后,就可以进行打包了

第一想到的就是用vs08中的安装部署进行打包,Build一次到同学那未安装.net的机子试了下后,发现不行,提示安装.net

因为.net在安装部署时会自动检测“依赖项”,由于我需要加载的net程序依赖于.net平台,

所以微软强制了这个“依赖项”(感觉微软应该把这个强制给删了,虽然强制有一定的好处,但是提供选择岂不是更好),

无奈,只有想别的方法去打包,然后想用InstallShield来打包,于是找来vc6的安装盘把这个装了下,由于没用过,就问了下同学,

同学说需要专门的语言来写点东西,啊啊,现在很急着用,所以再次放弃,到网上去淘那些“傻瓜”式的打包软件,

嘎嘎,找个了Setup2Go的打包软件,很好用哈,(有想要的直接baidu这个软件名,N多链接),很快的,打包完毕,Perfect!^_^

到了个未安装.net的机器上测试了下,完全没问题哈,只是使用虚拟机来加载时可能打开时会有2秒左右的延迟,嘎嘎,要稍等,

不过已经很好了哈,恩恩,安装包文件10M左右,对比过去单个exe80Kb来说是大了不少,不过这样对于一个不想装190M.net库的人来说,很值了哈^_^

顺便说下:想要.net程序完全脱离.net平台是不可能的哈,即使用虚拟机来加载那也毕竟是个.net的虚拟机。

抱歉!评论已关闭.