2010-04-28 107 views
3

我用Java實現的安裝程序,應該下載並安裝在Windows非特權用戶(從XP及以上)的應用程序。該應用程序是用C++編寫的,並且依賴於通常的VC運行時庫(msvcm90.dll和朋友)。爲了節省帶寬,我想避免下載VC可再發行組件,如果它們已經可供用戶使用的話。然而,我發現一個可靠的方法來檢測程序集是否安裝。檢測是否裝配可

如果組件丟失,我這裏所描述將它部署:

http://msdn.microsoft.com/en-us/library/ms235291%28VS.80%29.aspx

所以現在的問題僅僅是如何在一個(有)組件安裝在機器上檢測。這不是必需的,這可以從Java完成。我可以在C++中輕鬆編寫一個小探針,並將其靜態鏈接到該任務。

jgaa

回答

2

如果你願意寫一個小的測試程序,然後而不是寫一個看起來對你的依賴,寫一個具有相同的依賴關係爲您的應用程序。嘗試運行它。如果運行,依賴關係就位。如果失敗,可能的原因是缺少依賴關係。

+0

這是同樣的方式,GNU自動工作,是做,以及正在實施的最簡單最萬無一失的方法。如果您確實需要下載dll,則可以使用相同的過程來測試您的安裝。 – KeithB 2010-04-28 16:27:04

+0

這也是我的第一個想法,它的工作原理。當我啓動探針並且程序集丟失時,我得到退出代碼0xc0000135。然而,我感到驚訝的是沒有簡單的API來檢查程序集的存在。 – jgaa 2010-04-28 18:29:57

0

似乎是一個相當複雜的招果然如根據設定這些可能已經位於幾個可能的位置。也許你最好的選擇將是測試這些DLL的使用WinAPI的調用LoadLibrary的存在 - 這應該發現,自動共享,適合於構建任何DLL。

更妙的LoadLibrary,要求他們爲Ben提出了一個DLL。

+1

而不是調用CRT DLL上的'LoadLibrary'(它只會讓你感到可怕的「R6034:一個應用程序試圖加載C運行時庫不正確,請聯繫應用程序開發人員」消息),調用'LoadLibrary '在你自己的需要它們的DLL之一上。這會告訴你所有的系統清單是否安裝正確。 – 2010-04-28 16:17:56

+0

奔 - 優秀的建議,編輯成回答 – Elemental 2010-04-28 21:39:33