WinForm程序无Framwork运行

来源:互联网 发布:安卓网络测试软件 编辑:程序博客网 时间:2024/05/22 02:22

解决方案:

1, .Net Linker :中國移動的飛信就利用了它的核心。飛信是使用C#在.NET上開發的。貴,最便宜的版本要1000多美金。

2,用飛信的虛擬機來引導自己開發的.NET程序。

3,使用mono來達到脫離.NET框架的效果,可以跨平臺。【支持ASP.NET,以及.NET3.5】

例子1:先說最簡單的,使用飛信虛擬機來試驗吧。

先安裝"飛信2008正式版",然後打開安裝目錄,裏面有個VMDotNet文件夾,裏面就是.NET虛擬環境相關文件了,找到飛信安裝目錄下的"VMDotNet\v2.0.50727\FetionVM.exe"來啓動運行我們的.NET WinForm程序: 【可以使用命令行來傳值也可以用其他方式,都是一樣的】例如:

WinExec("FetionVM.exe 我的程序.exe", SW_SHOW); //C++

爲了方便,我們可以編寫一個檢測.net框架版本的程序作爲引導程序,如果已經安裝了.net框架就不用虛擬機,如果沒有安裝,調用虛擬器來啓動程序。【請不要使用C#或者其他託管類型的語言或者框架編寫這個引導程序,否則無法啓動】。

很容易吧?但是有個弊端,你的.NET程序如果要操作類似於SQL SERVER2000,2005,2008 或者是MYSQL,Oracle,DB2等數據庫,那就無法用飛信的這個虛擬機實現的,所以這個飛信的虛擬機只能做簡單的程序應用。還有一點大家要注意,使用飛信的虛擬機,涉及到的還有版權問題。測試一下,壓縮以後文件大概是6,7M左右,還行。

例子2:使用MONO來脫離框架並且跨平臺。注:測試結果顯示,使用MONO啓動.NET程序速度是最快的。比飛信的要快最少3倍。

首先到MONO的官方網站下載源代碼或者最新版本,然後安裝,我用的是最新的 2.2版本。打開目錄,找到兩個子目錄,名字分別是bin,lib ,然後複製到另外一個目錄裏面去【因爲安裝的時候默認安裝在C盤的】然後把你的.net開發的程序也複製到這個目錄裏面去;假設這個目錄名字叫做VM,那麼你的這個文件夾裏應該有個最少三個文件,一個是bin文件夾,一個是lib文件夾,還有一個就是你寫的.net程序了。

然後可以用C++編寫一個引導程序用來調用你的.NET程序;貼個簡單的代碼吧:

int main() WinExec("bin\\mono.exe 你的應用程序.exe",SW_SHOWNORMAL);
return 0; 當然,爲了方便,你可以自己在邏輯裏面判斷一下,機器裏安裝的是.NET的哪個版本?如果版本低了,就調用MONO來執行,如果匹配,就不調用MONO了。

【這個例子只是支持簡單的WINFORM和數據庫訪問,WEBSERVICE的,在文章末尾】

如果按照我說的一路操作,肯定是可以運行的了,但是你會發現,現在你的.NET程序是一個綠色軟件,但是他所在的目錄下lib,或者是bin文件夾的大小是非常恐怖的。。。有300M以上的大小,這豈不是和我們的想法衝突了?當然不是;我們來精簡目錄吧:

在bin目錄下,保留以下文件,其他的刪除即可

讓C#寫的WINFORM程序脫離框架運行

然後打開lib文件夾,在2.0文件夾下保留Accessibility.dll,mscorlib.dll,mscorlib.dll.mdb,然後在GAC文件夾裏面保留以下文件夾:

讓C#寫的WINFORM程序脫離框架運行

這樣,整個目錄就精簡的差不多了,當然,你可以根據自己的需要定製需要的各種類庫。然後打包即可,以我本人機器爲例,壓縮後的文件是9.8M,比.NET 2.0的框架小了很多,但是比飛信的那個虛擬機還是大了一些;換個角度來看,用mono不涉及版權問題,也可以調用各種數據庫,我本機測試操作的是SQL SERVER 2005數據庫,一切正常。讓你的.NET程序也跨平臺吧!只有MONO能做到這一點

原创粉丝点击