1. 程式人生 > >dll檔案載入執行載入的14001錯誤,由於應用程式配置不正確,應用程式未能啟動

dll檔案載入執行載入的14001錯誤,由於應用程式配置不正確,應用程式未能啟動

最近在處理專案問題的的時候發現了這麼一個問題,就是我們的程式在呼叫第三方提供的dll檔案的時候在一臺機器上面會報14001的錯誤,但是在另一臺機器上面不會。兩臺機器上面的作業系統是相同的。針對這個問題和這個錯誤碼,查找了很多的相關資料。

vc錯誤查詢的給予的對於14001的錯誤的解釋:由於應用程式配置不正確,應用程式未能啟動。重新安裝應用程式可能會糾正這個問題。 

下面是蒐集的一些網路資料針對這個問題的說明和解決方法個人感覺還是很有參考意義的:

資料

在VS2005下用C++寫的程式,在一臺未安裝VS2005的系統上,
用命令列方式執行,提示:
“系統無法執行指定的程式”
直接雙擊執行,提示:
“由於應用程式的配置不正確,應用程式未能啟動,重新安裝應用程式可能會糾正這個問題”


以前用VC6和VS2003的話, 如果缺少庫檔案,是會提示缺少“**.dll”,但是用VS2005卻沒有這樣的提示。


自己實驗了一下,感覺以下幾種解決辦法是可行的:
方法一:
在類似C:\Program Files\Microsoft Visual Studio 8\VC\redi
st\Debug_NonRedist\x86\Microsoft.VC80.DebugCRT 下找到了下列檔案:


msvcm80d.dll
msvcp80d.dll
msvcr80d.dll
Microsoft.VC80.DebugCRT.manifest


把這幾個檔案拷貝到目標機器上,與執行程式同一資料夾或放到system32下,就可以正確運行了。


其他release版、MFC程式什麼的都是拷redist下相應資料夾下的檔案就可以了,資料夾後都有標識!


方法二:
修改編譯選項,將/MD或/MDd 改為 /MT或/MTd,這樣就實現了對VC執行時庫的靜態連結,在執行時就不再需要VC的dll了。


方法三:


工程-》屬性-》配置屬性-》常規-》MFC的使用,選擇“在靜態庫中使用mfc”
這樣生成的exe檔案應該就可以在其他機器上跑了。


方法四:


你的vc8安裝盤上找到再分發包vcredist_xxx.exe和你的程式捆綁安裝。




如果安裝Microsoft Visual C++ 2005 出現如下錯誤↓:


事件檢視器顯示:產品: Microsoft Visual C++ 2005 Redistributable -- Error 1935.安裝程式集“Microsoft.VC80.ATL,type="win32",version="8.0.50727.4053",publicKeyToken="1fc8b3b9a1e18e3b",processorArchitecture="x86"”過程中發生錯誤。請參閱幫助和支援獲取詳細資訊。HRESULT: 0x80070422。程式集介面: IAssemblyCacheItem,功能: Commit,元件: {97F81AF1-0E47-DC99-A01F-C8B3B9A1E18E}




解決方法:啟動 Windows Modules Installer 服務,再安裝。OK,解決。




http://social.msdn.microsoft.com/forums/en-US/vcgeneral/thread/66bc8cab-c134-49a8-85e5-37ca9efbdeb4/

個人問題解決過程:

1.考慮的是兩個方面:

一個是程式呼叫的dll是否提供了所要的方法;

一個是dll所依賴的dll是否完整。

這兩方面都是通過depends工具來檢視

2.我的問題是我用的是別人提供的dll檔案自己不可以去更改dll檔案的生成方式,因此所做的工作就是設法去匯入dll所依賴的dll檔案。

(1)配置系統環境變數的path路徑使dll做可能依賴的系統dll檔案能夠找到依賴的dll。

(2)推測第三方所提供的dll開發時候應該用的是vs2005或者vs2008在或者就是vs2010,然後所提供的dll檔案或許就是動態載入的dll,所以安裝了vcredist_x86的vs2005,vs2008以及vs2010版本的,這個地方的操作對於我解決問題起了作用,但是具體是哪一個這個沒有去確定

(3)為了使自己程式執行的環境沒有必要都去安裝vcredist_x86所以找到vcredist_x86安裝之後對應的dll檔案和呼叫的第三方的dll放在同一個目錄下面,也可以放在C:\WINDOWS\system32但是path路徑中的配置一定要有,一般來說都是會有的。

通過上面的三個方面個人的問題是解決了,當然具體到個人的專案裡面還有很多的方面要考慮,但就這個dll載入的14001錯誤,上面的解決方法還是ok的。網上的相關資料還是很多的,希望個人整理的這些對你有小小的幫助。針對vcredist_x86的dll檔案以及vs2005,vs2008 和 vs 2010對應的exe安裝檔案可以搜一下,我也把我搜到的上傳一下,共享。