備注學院

          LuLu

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            5 隨筆 :: 50 文章 :: 16 評論 :: 0 Trackbacks
          轉:http://www.cnblogs.com/daylight/archive/2008/10/02/1303037.html

          這幾天看了很多關于脫離框架運行C#程序的文章,千篇一律,都是講飛信方案的,此方案涉及一些法律問題,只能自己研究一下,后來用google美國網站搜了一把,看了些文章,無意中發現mono,又用mono關鍵字到google中國搜了一把,已經有人實現控制臺程序脫離.net框架了。

          其實就是換mono的公共語言運行時來使用。這樣做的好處是體積小,發布免安裝。首先,您需要下載mono的最新版。http://ftp.novell.com/pub/mono/archive/1.9.1/windows-installer/2/mono-1.9.1-gtksharp-2.10.4-win32-2.exe,安裝后,就可以繼續進行了。

          1、用Visual Studio創建一個Windows應用程序,假設叫做WinApp,并添加一個按鈕。

          2、編譯此項目,得到一個WinApp.exe文件。

          3、自己建立一個文件夾WinApp,其中再建立bin和lib這兩個文件夾

          4、將mono安裝文件夾中的bin和lib子文件夾中需要的文件拷貝至剛才建立的那兩個文件夾。mono的默認安裝位置是:C:\Program Files\Mono-1.9.1

          5、將需要運行的exe文件放入WinApp文件夾。

          6、調用,可以使用bat批處理來調用,bin\mono.exe WinApp.exe。(其實寫個VC++的小程序調用最好,可以我沒學過VC++)

          好了,發個代碼上來,有興趣的朋友可以研究一下,7zip打包后僅3.26MB,卻實現了免安裝微軟龐大的框架。此測試項目我在純凈的虛擬機和本機均測試過,但有個bug,mono對中文路徑支持不好,如若有中文路徑,則無法運行。我后來又試了用C:\Program Files\Mono-1.9.1\bin\mono.exe來執行,則沒有中文路徑問題。我覺得缺少了哪個文件,一個一個試著拷貝到WinApp文件夾中,再用批處理來執行,還是錯誤。后來干脆將整個安裝目錄的文件全搬到WinApp目錄中,執行批處理還是失敗,可是用C:\Program Files\Mono-1.9.1\bin\mono.exe來執行就是能成功,百思不得其解啊!究竟少了什么東西呢?

          博客園單個文件限制在了1.95MB,我試了好多次不成功,大家到我的CSDN上下載吧,0分資源。

          http://download.csdn.net/source/661248

          posted on 2008-12-11 09:21 smildlzj 閱讀(2139) 評論(2)  編輯  收藏 所屬分類: C#

          評論

          # re: 使C#程序脫離.net框架運行(非飛信方式) 2010-09-12 09:23 悠哉悠哉
          .NET程序脫離框架進階 之 Embedding Mono  使用MONO讓.NET程序脫離.NET Framework運行是個不錯的方法,網上已有很多介紹。但是MONO運行.NET程序也有讓人郁悶的地方,比如你只能使用“mono 你的NET程序名.exe”這樣的命令運行你的.NET程序(當然,你也可以用C++寫個程序來調用。),雖然也不復雜,但是程序運行時MONO黑乎乎的命令行窗口實在礙眼。

            前些日子看了下MONO官方Embedding Mono介紹,于是動手寫了個,用起來爽多了,看下面C++代碼:
          #include "stdafx.h"
          #include <glib/glib.h>
          #include <mono/jit/jit.h>
          #include <mono/metadata/assembly.h>
          #include <mono/metadata/environment.h>
          #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
          int main(int argc, char* argv[])
          {
          int retval;
          char *file;
          file = ".\\demo.exe"; // .NET程序路徑
          //argv[0] = file;
          mono_set_dirs(".\\lib", NULL);
          MonoDomain *domain;
          MonoAssembly *assembly;
          domain = mono_jit_init (file);
          assembly = mono_domain_assembly_open (domain, file);
          if (!assembly) exit (2);
          mono_jit_exec (domain, assembly, argc, argv);
          retval = mono_environment_exitcode_get ();
          mono_jit_cleanup (domain);
          return retval;
          }
            哎,不會寫文章,直接上源碼下載地址:http://www.xun6.com/file/0dcf46622/EmbeddingMono.zip.html
            壓縮包中包含精簡過的MONO框架(在Release目錄中)僅包含demo所需的組件,所以不適合你的程序,你可以自行下載MONO框架進行精簡,這方面網上已有很多文章,我就不再羅嗦了。
            回復  更多評論
            

          # re: 使C#程序脫離.net框架運行(非飛信方式) 2010-09-12 11:06 悠哉悠哉
          .NET程序脫離框架進階 之 Embedding Mono  使用MONO讓.NET程序脫離.NET Framework運行是個不錯的方法,網上已有很多介紹。但是MONO運行.NET程序也有讓人郁悶的地方,比如你只能使用“mono 你的NET程序名.exe”這樣的命令運行你的.NET程序(當然,你也可以用C++寫個程序來調用。),雖然也不復雜,但是程序運行時MONO黑乎乎的命令行窗口實在礙眼。

            前些日子看了下MONO官方Embedding Mono介紹,于是動手寫了個,用起來爽多了,看下面C++代碼:
          #include "stdafx.h"
          #include <glib/glib.h>
          #include <mono/jit/jit.h>
          #include <mono/metadata/assembly.h>
          #include <mono/metadata/environment.h>
          #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
          int main(int argc, char* argv[])
          {
          int retval;
          char *file;
          file = ".\\demo.exe"; // .NET程序路徑
          //argv[0] = file;
          mono_set_dirs(".\\lib", NULL);
          MonoDomain *domain;
          MonoAssembly *assembly;
          domain = mono_jit_init (file);
          assembly = mono_domain_assembly_open (domain, file);
          if (!assembly) exit (2);
          mono_jit_exec (domain, assembly, argc, argv);
          retval = mono_environment_exitcode_get ();
          mono_jit_cleanup (domain);
          return retval;
          }
            哎,不會寫文章,直接上源碼下載地址:http://www.xun6.com/file/0dcf46622/EmbeddingMono.zip.html
            壓縮包中包含精簡過的MONO框架(在Release目錄中)僅包含demo所需的組件,所以不適合你的程序,你可以自行下載MONO框架進行精簡,這方面網上已有很多文章,我就不再羅嗦了。
            回復  更多評論
            

          主站蜘蛛池模板: 布尔津县| 内乡县| 阳高县| 肃北| 呼玛县| 集安市| 望江县| 芦溪县| 万山特区| 辰溪县| 怀集县| 沛县| 基隆市| 和平县| 庄河市| 玉门市| 赣州市| 民勤县| 永丰县| 白玉县| 锦州市| 汝州市| 瑞丽市| 华亭县| 迭部县| 沙湾县| 前郭尔| 巨鹿县| 内丘县| 育儿| 桐乡市| 时尚| 八宿县| 易门县| 肥城市| 来凤县| 呼伦贝尔市| 云梦县| 鄂尔多斯市| 武清区| 九龙县|