從四年前剛學C#時就一直想找到一種方法可以讓.Net程式在未安裝framework的電腦上運行,但一直沒有找到真正可用的。雖然有些公司發布了可以將.net代碼編譯成navtive代碼以脫離.net環境運行,如Remotesoft DOTNET Linker,Xenocode Postbuild等,但一直沒有破解版,用它們編譯的程式每次運行會添出個著作權資訊。最近偶然發現一種方法可以做到真正使程式脫離.net環境運行且沒有任何著作權資訊添出,現將使用方法、原始碼、測試程式發佈於此:
請首先在文章末尾下載測試程式,是一個用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程式原始碼