2012-11-01 24 views
2

我有一個的.exe正在使用發佈配置MSVC2005編譯。問題是,當我發佈這個.EXE給別人,他們得到這個消息:如何檢查使用msvcr80.dll的應用程序?

This application could not be started, because the application configuration is incorrect. In order to solve the problem you should reinstall the application."

我給他們Vcredist.exe的,它解決了這個問題,但是,我想知道這是爲什麼。這僅適用於某些電腦發生的呢?到目前爲止,我都不能運行.exe 1枚,另一個可以運行.exe文件。兩者都安裝相同的應用。可以運行.exe文件我的電腦有msvcr80。 dll已安裝,而那些無法運行的版本則不具有msvcr80.dll。

有誰知道爲什麼msvcr80.dll沒有安裝在某些電腦上?由於兩臺PC都安裝了相同的操作系統和應用程序。

是否有一些工具,可以該應用程序使用哪些DLL檢查?

回答

0

回覆「有沒有一些工具可以檢查哪個應用程序使用哪個dll?」閱讀this。提供vcredist.exe解決了這個問題,因爲他們的系統中沒有安裝Microsoft Visual C++ 2010 Redistributable Package(x86)/最新版本。可以從Microsoft's Official Website下載。另外,如果您對命令行感興趣,您可以查看命令tasklist

1

如果有些計算機已經有了計劃,這是與2005年建成的MSVC,安裝那麼你的exe文件的副本會工作。我不認爲msvc可再發行組件預裝在任何版本的操作系統上。

如果你想知道,如果它使用MSVC運行時的特定版本,您可以使用Process Explorer的應用程序的運行時 - 微軟的工具,從而顯示過程中儘可能多的信息。

0

靜態鏈接C運行時是解決此問題的另一種方法。 這裏是如何做到這一點:Static linking

1

有誰知道爲什麼MSVCR80.DLL沒有安裝在某些電腦?由於兩臺PC都安裝了相同的操作系統和應用程序。

Windows未預裝任何版本的C運行時庫。 C運行時庫可以由運行vcredist的用戶安裝,也可以安裝依賴於它的應用程序,並在其自己的安裝程序中包含其副本。

僅僅因爲你正在尋找在兩臺PC安裝相同的應用程序並不意味着它們具有相同的安裝歷史。也許一臺PC已經安裝了一個包含運行時庫的應用程序,然後應用程序被卸載,但該庫被留下。

如果你想分配依賴於C運行時庫(或REDIST包裝的另一個庫)的應用程序,你的選擇是:

  1. 需要用戶來下載和安裝vcredist。
  2. 包含必要庫的副本並將其安裝在與可執行文件相同的目錄中。
  3. 鏈接到運行時庫的靜態副本。
  4. 將運行時庫合併模塊包含在您的.MSI安裝程序中,該安裝程序會將運行時庫安裝在通用位置(如果尚未安裝)。

是否有一些工具可以檢查哪個應用程序使用哪個dll?

Visual Studio用來帶有一個名爲depend.exe的工具,用於檢查可執行文件或DLL,並且可以過渡地查找它需要的所有DLL。不再支持此工具,因爲它沒有在較新版本的Windows中提供的「Side by Side」安裝功能。但我相信有一個免費的(開源?)版本的depend.exe可用。

如果您只是想知道某個特定的可執行文件是否對DLL有直接依賴關係,那麼可以使用dumpbin,這是Visual Studio附帶的命令行工具。如果使用dumpbin /imports myapp.exe,則可以看到它所依賴的所有DLL(但不一定是那些DLL所依賴的DLL)。

相關問題