2012-12-09 104 views
5

我安裝了VS 2012 Professional和XP更新。我使用v110_xp作爲VS 2012上的平臺工具集構建了我的項目。我的項目的.msi包在Win 7上安裝正常,但在Win XP SP3上失敗。報道了XP SP3的錯誤是 -VS 2012 - XP問題

「程序輸入點FlushProcessWriteBuffers無法 位於動態鏈接庫Kernel32.dll中」。

雖然從VS 2005構建的相同項目在XP SP3上安裝得很好。我不確定VS 2012上會發生什麼。_WIN32_WINNT設置爲0x0501。有人可以指導如何解決問題?

任何幫助,非常感謝,

Mahesh。

+0

根據MSDN,該功能是Vista +。 – chris

+0

@chris我明白了。但是,如果在VS 2005上構建包時它是如何正常工作的,這一點我不明白。 – Mahesh

+0

由於VS2005運行時不會嘗試鏈接到該功能。但是您部署的VS2012運行時確實如此。 –

回答

13

是的,C運行時對FlushProcessWriteBuffers()有依賴性。 msvcrt110.dll和libcmtl.lib的更新版本,與更新一起使用的版本不再直接鏈接到該函數,它們使用GetProcAddress()來查找它,如果它是錯誤的,則會一瘸一拐地走下去。所以你不應該得到這個錯誤。

所以非常高的可能性是您部署了錯誤版本的msvcrt110.dll,而不是更新的版本。您可以在c:\ windows \ system32中找到它,查看屬性。我的日期是11年5月11日11.00.51106.1版。一個單獨的安裝程序可用於它here

+0

你是對的。我打包了錯誤的dll。我的項目正在構建並放置正確的dll。讓你知道它是怎麼回事。希望它在XP上成功:) – Mahesh

+0

那是另一個更新。 –

+0

對不起,不明白。你能否詳細說明一下? – Mahesh

3

您正在安裝的VS2012運行時使用的功能在XP中不存在。請參閱此MS文章:Targeting Windows XP with C++ in Visual Studio 2012,其中解釋更多並提供了一些解決方法。

Update 1 for VS2012解決了這個問題。

但更新1不僅僅是關於新的Windows平臺。它還使您能夠在Windows XP中使用Visual Studio 2012中的本機C++應用程序。

如果您使用update 1構建並仍然遇到問題,那麼我懷疑您正在安裝過時的運行時。您需要部署隨更新1一起交付的運行時。

+1

有一個更新。現在有一個編譯器。 http://www.microsoft.com/visualstudio/eng/visual-studio-update#story-update-1 – chris

+0

@David你給了我一個提示。我在.msi中封裝了C,C++運行時並不是XP支持的最新版本。讓我看看在支持C,C++運行時後它是如何發展的。但無論如何,函數在Kernel32.dll中查找,而不是在C,C++運行時查找。無論如何,我會試一試。 – Mahesh

+0

@Mahesh我的最後一段說的和你剛剛說的一樣。您正在部署的C運行時正在尋找XP中不存在的Windows API函數。該API函數存在於kernel32中,但只能在Vista中運行。所以它是運行時試圖在kernel32中加載一個在XP上不存在的函數。問題出在運行時。錯誤消息提到kernel32的事實並不意味着問題在於kernel32。 –

0

您可以通過在開發機器中包含VC11合併模塊(程序文件\公用文件\合併模塊)來解決此問題。這比在安裝程序中運行redist exe更簡單。

如果使用維克斯:merge module addition

我已經在服務器03,XP64和XP32測試。