2013-06-04 50 views
1

我最近遇到了這個問題。我在Visual Studio 2008中創建了一個簡單的基於控制檯的項目,我在發佈模式下構建併發布了它。無法在乾淨的系統中啓動內置VS2008的可執行文件

我們發現,在一臺乾淨的windows xp sp3機器上,雙擊的可執行文件沒有啓動,並且出現錯誤提示「配置不正確」。我們通過在系統上安裝VS2008可重新分發軟件包來解決這個問題。我的問題是:

1-爲什麼會發生這種情況?它沒有發生在所有的XP機器上,但其中一些。 Windows xp sp3默認情況下不需要運行簡單的win32程序的文件是非常令人難以置信的。那麼notepad.exe和其他程序在哪裏運行?我考慮過的一種可能性可能是操作系統中的運行時文件比較舊,而exe文件則指的是較新版本的文件。但是我想知道是不是這樣,因爲VS 2008本身就很老了。讓我知道你的想法。

2-因爲我必須在很多機器上運行exe,所以我正在考慮一種方法,通過VS 2008中的win32程序靜態鏈接所有需要的庫。我知道鏈接器中的/ MT開關選項,但想知道它是否會照顧所有運行時庫(C++庫和其他窗口庫)。

謝謝。

+0

目標系統上未安裝類似於Visual C(可再發行組件)運行時庫的聲音。我已經遇到並且自己解決了這個問題,但是爲了得到正確答案已經記不清了。我相信別人會很快想出一個。 –

+0

感謝您的回覆Adrian,不確定是否回覆,但有人實際上對我提出了這個問題,而沒有打擾任何評論。大! – user1624807

+0

我沒有看到downvote的理由,所以擊倒了它。 –

回答

3
  1. 發生這種情況是因爲VS2008的可再發行組件未安裝在Windows中。它們必須由另一個應用程序安裝,這意味着它們將不會出現在原始的Windows安裝中。但是,由於許多Windows應用程序使用這些應用程序,所以它們可能會出現在已安裝了幾個應用程序的機器上。原生Windows應用程序(如記事本)不依賴於它們,因此沒有它們,記事本運行並不令人意外。

  2. 正如typ1232已經指出的,/ MT選項將解決您的問題(以增加EXE和DLL大小爲代價)。本地Windows API的庫保證存在,除非它們被明確記錄爲必須單獨安裝的選項,所以您不必擔心它們。

與處女Windows安裝一種釋放模式構建測試應用在測試中任何Windows應用程序,因爲你現在已經發現了關鍵的一步。

+0

請注意,記事本和其他Windows程序仍然依賴於C運行時。它使用「msvcrt.dll」(Windows NT CRT DLL)。這是[可能](http://kobyk.wordpress.com/2007/07/20/dynamically-linking-with-msvcrtdll-using-visual-c-2005/),但**不推薦/支持**動態鏈接反對那些! – typ1232

2

/MT選項將導致運行時庫靜態鏈接,因此動態庫不必在目標系統上存在。

另一種方法是將redist安裝程序與您的安裝程序一起打包。

相關問題