ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 脱离.net运行winform程序

脱离.net运行winform程序

原创 Linux操作系统 作者:fangqm 时间:2011-02-12 23:30:30 0 删除 编辑
运用Mono,实现跨平台

首先到MONO的官方网站下载源代码或者最新版本下载地址:

 

安装后,把.NET程序,我们拷贝到安装的路径下面,然后运行下面的代码。

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->(MONO安装目录)bin\\mono.exe  .net应用程序.exe

OK,可以运行了,这个就是用MONO提供的程序跑.NET框架。

现在它的体积过大,精简一下,新建个文件夹,然后我们再把安装路径下的bin和lib拷贝到这个文件夹里。首先精简bin目录,bin只需要保存下面几个文件就可以了。

  • mono.dll
  • libgthread-2.0-0.dll
  • libglib-2.0-0.dll
  • intl.dll
  • iconv.dll
  • mono.exe

除了上面的文件以外我们都可以删除掉,然后我们到lib目录里保留下面的文件就可以了。

  • mono文件夹

mono文件夹里面保留这些文件,如果你要使用多个版本的话,比如2.0和3.5的特性,可以保留相应的文件夹,这里我保留了2.0,3.5和gac,其中2.0和gac是必须的。

我们在2.0目录里面只需要保留以下文件。

  • Accessibility.dll
  • mscorlib.dll
  • mscorlib.dll.mdb

其他的可以狂删,在gac目录里面,我们只需要保留下面这个文件夹就可以了。

  • Boo.Lang

我们再来压缩一下我们的程序,程序大小才8m,可以接受了。体积变小之后,

这里值得一提的是,我们在不同的平台里面可以使用不同的C++程序来启动我们的程序(即运行\\bin\mono.exe appname.exe),代码如下。

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->int main()
{
    WinExec(
"bin\\mono.exe appname.exe",SW_SHOWNORMAL);
    
return 0;
}

到此结束

=================================另一种方法===================

下载测试程序,是一个用C#做的串口工具,下载解压后有两个文件夹(FrameWork和APP)和一个程序(串口工具.exe),在APP文件夹下有一个名为9527.exe的程序,这个是C#真正的“串口工具.exe”,而主目录下的串口工具.exe只是一个Loader程序,它运行后首先判断电脑上有没有安装framework,若有,则直接启动APP下的9527.exe程序;若无,则通过framework虚拟机(FrameWork下的VM.exe(其实是飞信框架里的FetionVM.exe,修改了它的图标和版权,想改成其它的大家可以用VC改一下,有网友强列要求指出这一点,想不明白为什么,呵呵,让指出就指出吧,还要求指出调用的方法,,其实我连源程序都公布了,用说的这么明白吗))启动9527.exe程序。Loader程序不会打开任何窗口,并在启动真正应用程序后立即退出。Loader程序主函数(VC6.0编写)的代码如下:
      主函数:
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    TCHAR fwVersion[VERSION];
    if(CheckRegistryKeyExistance(fwVersion))
    {
        if(CompareFWVersions(fwVersion, "2.0"))//最低版本要求2.0
        {       
            RunApplication(".\\app\\9527.exe");//直接运行
        }
        else
        {   
            //应用程序放在APP目录下,要启动的程序的名字为9527.exe,
            //9527周星弛在《唐伯虎点秋香》的代号,呵
            RunApplication(".\\FrameWork\\VM.exe \".\\app\\9527.exe\"");//通过虚拟机运行
        }
    }
    else
    {
        RunApplication(".\\FrameWork\\VM.exe \".\\app\\9527.exe\"");//通过虚拟机运行
       
    }
     return 0;
}

判断是否安装的代码就不贴出来了,可以在文章末尾下载整个VC6的工程文件看。

下面总结一下如何使用:
1. 下载我的例子程序
2. 清空APP下的所有文件
3. 把你自已的.net可执行程序和相关文件全部复制到APP下,并将可执行程序的名字改为9527.exe (不喜欢这个名字可以修改Loader程序重新编译)
4. 把主目录的“串口工具.exe"名字改成任何你想要的名字。(要改图标的话,建议下载我的Loader源程序,修改后重新编译)

大功告成,拿到一台没装.net的电脑上试试吧。祝好运。 

相关下载:
     测试程序
     Loader程序源代码

文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fsc2988877/archive/2007/08/25/1758908.aspx

安装好VC++6.0,以工作区方式打开vmloader.dsw,然后对VMLoader.cpp进行相应内容的更改,

找到一个图标文件覆盖016.ico

最后按F7或组建生成EXE

 

当出现 类似于下面的警告:

         warning C4996: strcpy was declared deprecated

    出现这样的警告,是因为VC2005中认为CRT中的一组函数如果使用不当,可能会产生诸如内存泄露、缓冲区溢出、非法访问等安全问题。这些函数如:strcpy、strcat等。

    对于这些问题,VC2005建议使用这些函数的更高级的安全版本,即在这些函数名后面加了一个_s的函数。这些安全版本函数使用起来更有效,也便于识别,如:strcpy_s,calloc_s等。

    当然,如果执意使用老版本、非安全版本函数,可以使用_CRT_SECURE_NO_DEPRECATE标记来忽略这些警告问题。办法是在编译选项 C/C++ | Preprocessor | Preprocessor Definitions中,增加_CRT_SECURE_NO_DEPRECATE标记即可。 

中文:项目的属性-C\C++---预处理器-----预处理器定义-------增加_CRT_SECURE_NO_DEPRECATE标记即可

954eed7bb3fc77d50bd18796.jpg

22.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23109131/viewspace-687103/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-03-24

  • 博文量
    298
  • 访问量
    730355