通過FetionVM實現無.net框架環境下運行.NET程序

本文轉自:http://hi.baidu.com/flyskymlf/blog/item/1c425259f816552f2834f0ce.html

本來想把用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的虛擬機。

參考文章:對作者表示感謝

http://www.cnblogs.com/XwendotNet/archive/2008/04/06/1138810.html

http://www.cnblogs.com/scottckt/archive/2007/12/14/995258.html

http://blog.csdn.net/wlwqw/archive/2007/09/17/1788113.aspx

發佈了171 篇原創文章 · 獲贊 2 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章