2010-07-01 84 views
18

我設計了一個應用程序,它不需要安裝,可供非管理員使用。我寧願不會失去此功能,但是當我在其他計算機上使用.exe而不是我對其編程時,我得到一個錯誤消息,MSVCP100.dll正在阻止該文件執行。使用VS 2010構建exe文件後C++丟失MSVCP100.dll

我在這裏做錯了什麼?如何在發佈版本中包含該文件?

謝謝!

回答

30

配置項目靜態鏈接到C/C++運行,而不是鏈接到運行時DLL的:

  • 配置屬性| C/C++ |代碼生成|運行時庫

爲您的調試版本選擇多線程(/ MT)(或多線程調試(/ MTd))。

作爲一種替代方法,您應該能夠使用http://msdn.microsoft.com/en-us/library/ms235291.aspx文檔「將Visual C++庫DLL部署爲專用程序集」下的技術獲得C/C++運行時DLL的xcopy部署。我沒有嘗試過這種技術,因爲如果需要xcopy安裝本機C++程序,靜態鏈接通常會更簡單。

+0

儘管如此,理想情況下,您需要使用清單並通過ClickOnce進行分發,以便將來使用的.dlls補丁能夠適當更新。但這也有效:) – MSN 2010-07-01 23:23:56

+0

@MSN:雖然這種做法違背了「不需要安裝」部分;) – Cogwheel 2010-07-01 23:24:48

+0

更不用說「C++」部分了。 – 2010-07-01 23:34:27

4

http://msdn.microsoft.com/en-us/library/ms235299.aspx

已編譯使用Visual C++需要分配C++運行時分發應用程序.DLL文件,你的應用程序使用。在你的情況,我想你只想分發一個文件夾,所以遵循的方向(適當修改爲您的應用程序)在這裏:

http://msdn.microsoft.com/en-us/library/dd293565.aspx

或者只是msvcp100.dll複製到您的應用程序的目錄旁邊的.exe文件你會很開心。

32位msvcp100.dllC:\Windows\SysWOW64\

64位msvcp100.dllC:\Windows\System32\

+0

」或者,只需將msvcp100.dll複製到您的應用程序目錄旁邊.exe,您就可以輕鬆前往。「我的理解是你沒有被允許這樣做? – 2011-08-18 10:50:54

3

我在做什麼錯在這裏

你遇到了什麼是DLL地獄。您曾無意中在前一個編譯器中使用了一個動態鏈接,在大多數目標系統上發生的情況是有適當的C運行時。 Windows通常包括VC 6 CRT,以及更新的SP甚至CRT 7。

當您更改爲最新的VC編譯器時,大多數系統將不會爲您預先安裝新的VC運行時。

由於Michael Burr說,如果靜態鏈接,可以回到'不安裝'。

或者您可以將CRT和清單包含在同一個文件夾中,仍然不需要安裝。

或者包括VS2010的Vcredist.exe的,並有1關安裝

+2

這不會被稱爲「不知道該怎麼辦嗎?」 – 2010-07-01 23:36:00

+0

這是值得一分。 :) – 2010-07-02 00:07:29

+0

我第二。絕對值得一分。 – 2012-09-14 15:07:01