2010-04-28 104 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