分享

透过Mono让.Net变成为绿色软体

 看见就非常 2012-04-20

我看到了一篇文章使C#程序脱离.net框架运行(非飞信方式) ,该文作者透过Mono Framework,实现了.Net软体免安装即可执行,依照该篇文章的指引,我实做了以下内容。

.Net Framework透过Mono变成绿色软体测试

1.首先下载并安装Mono for Windows, Gtk#, and XSP ,Mono for Windows预设安装在C:\Program Files\Mono-2.0.1。

2.撰写并编译一个.Net程式。

3.新建一个资料夹,从Mono安装目录中复制其bin、lib资料夹,并把已经编译好的程式放入其中,这里我又找来了之前写的小工具重复文字产生器来当实验品,因此目录内容会有这些东西。

4.由于免安装的.Net程式必须透过Mono来执行,所以原作者介绍使用批次档来达成,将以下指令存成.bat放在目录下即可。

bin\mono.exe StrTemplate.exe

但这样的方式执行后除了原本该执行的StrTemplate.exe之外还会有一个因为批次档呼叫Mono Console所开启的命令列视窗,软体执行中还不可以将该视窗关闭,实在有碍观瞻。

所以采用原作者的建议,另外写一个前导的小程式会是比较好的作法,因此我透过Dev C++写一个Console Application小程式来解决这个问题,程式码如下,编译后将该执行档一同放入新建立的资料夹中。

#include
#include
using namespace std;

int main(int argc, char *argv[])
{
WinExec("bin\\mono.exe StrTemplate.exe",SW_SHOWNORMAL);
return EXIT_SUCCESS;
}
5.至此,绿色版的.Net软体已经算完成了,执行编译好的前导程式即可呼叫Mono来执行StrTemplate.exe,执行画面如下,虽然无法显示Windows XP的样式,但功能执行上却没有任何问题。

6.最后,由于复制过来的是整个Mono Framework的内容,因此现在整个体积共309 MB,实在是很吓人,所以必须删除不必要的部份,经测试在bin目录中的以下东西是必须的。

mono.exe (Mono的Console执行档)
mono.dll
iconv.dll
intl.dll
libglib-2.0-0.dll
libgthread-2.0-0.dll
而\lib\mono\2.0中的mscorlib.dll也是必须的

再来就只剩下\lib\mono\gac\里面的东西了,这里必须留下来的.dll程式库,将依照.Net程式中所使用到的内容而定,我在StrTemplate.exe中使用了以下套件

System
System.Collections.Generic
System.Drawing
System.Windows.Forms
System.Collections
因此逐一删除不必要的东西后,留下了4.96 MB的程式库,Mono总共的体积为9.69 MB。

最后再将全部的内容以7-Zip的格式压缩,就可以得到一个3.34 MB的压缩档,方便于网路下载。

大功告成

下载绿色版的重复文字产生器,解压缩后执行RunOnMono.exe或RunOnMono.bat即可

免安装版(3.34MB)
自解压缩版(3.42MB)
延伸思考

既然透过Mono可以达成.Net软体免安装,加上Mono又是Open Source的专案,那么只要有人以Mono为基础开发一套工具,直接将所需的程式库及.Net软体包装起来,就好像Delphi跟C++Builder,能将packages、dynamic RTL包装成单一执行档一样,相信.Net以后也有机会能以单一执行档的方式或者不用透过呼叫mono.exe的方式执行,让.Net程式成为更真实的绿色软体!或许这样的东西早已经存在了,只是我还没有发现罢了。

又或者再动点手脚,透过Mono甚至可以达成免安装且跨平台哦!


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多