寫於2015-3-21 16:59 由qq空間轉過來,格式有點亂
之前遇到一個問題,c++\cli的程序部署在服務器上面,程序運行后沒有反應就退出了,日志管理器中記錄兩個錯誤信息分別如下:
1> Faulting application 5gameserver_1.exe, version 0.0.0.0, stamp 5502842b, faulting module kernel32.dll, version 5.2.3790.5295, stamp 52f35537, debug? 0, fault address 0x0000bf93.
2> Application: 5GameServer_1.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.TypeInitializationException
Stack:
首先可以確定的程序在開發環境中確實運行沒有問題,經驗告訴這是少了c++運行庫,網上搜索一堆c++運行庫,我的開發環境用的vs2010,但是c++\cli比較特殊,可以指定vs2010編譯,否則用vs2012默認的庫,xp級別的系統就沒辦法運行了,網上找了vc++ 2010 Redistributable安裝,結果很失望問題並沒能解決..由於當時想着先運行起來,服務器網絡又好,於是乎一個驚人的做法搞定了,不錯下載2.5G的安裝包,在服務器安裝了一個vs2010.不用說程序很順利的跑了起來,一切正常.
今天再次部署這個程序,由於以后可能頻繁的換服務器,這樣下載安裝vs2010,肯定是不可行的方案,那為什么安裝了vc++ 2010運行庫不行,而安裝vs2010就可以了? 那就來看看vs2010安裝到底多了什么? 我們在vs2010自定義安裝的子級列表中把勾都去掉,發現vs2010先安裝vc9.0 runtime,然后在是vc10.runtime,一邊安裝一邊測試中發現vc10.runtime安裝過了后,程序就可以正常運行了...幾經排除,確認需要的就是vc10.runtime.
但問題是網上搜索兩個小時都未能找到vc10 runtime的單獨安裝程序,搜到的都是redistributable的運行庫,當然中間在vs2010安裝包中直接找到了這個runtime,可是這個.msi要求用setup.exe進行安裝,也就是說須要從vs安裝整起... 后來想着怎么精簡這個安裝包,終於在崩潰中找到了解葯. "手工安裝Visual Studio 2010"
但問題是網上搜索兩個小時都未能找到vc10 runtime的單獨安裝程序,搜到的都是redistributable的運行庫,當然中間在vs2010安裝包中直接找到了這個runtime,可是這個.msi要求用setup.exe進行安裝,也就是說須要從vs安裝整起... 后來想着怎么精簡這個安裝包,終於在崩潰中找到了解葯. "手工安裝Visual Studio 2010"
http://blog.csdn.net/aasmfox/article/details/8631733
最后的解決方案即把vs2010安裝包中的runtime復制出來,用一個cmd命令弄個bat放在vc_runtime_x86.msi一起進行安裝即可
vc_runtime_x86.msi NVSUI=1
對,就是加一個 NVSUI的參數
雖然最后的方法很簡單,花了這么長時間,但總算找到runtime,以后在有類似的部署就不在有問題了~