Installation 检查DirectX最终用户运行时的注册表

Installation 检查DirectX最终用户运行时的注册表,installation,registry,directx,Installation,Registry,Directx,我正在创建一个安装程序,用于检查注册表中是否有未安装的软件/组件,并在需要时进行安装。我遇到的问题是,如果我从DirectX最终用户运行时web安装程序在新的Windows副本上安装最新的DirectX最终用户运行时,我需要运行的软件将正确启动(http://www.microsoft.com/en-au/download/details.aspx?id=35) 如果未安装,我得到的错误是“程序无法启动,因为您的计算机缺少d3dx9_43.dll”。现在,即使是在新安装的windows中,HKE

我正在创建一个安装程序,用于检查注册表中是否有未安装的软件/组件,并在需要时进行安装。我遇到的问题是,如果我从DirectX最终用户运行时web安装程序在新的Windows副本上安装最新的DirectX最终用户运行时,我需要运行的软件将正确启动(http://www.microsoft.com/en-au/download/details.aspx?id=35)

如果未安装,我得到的错误是“程序无法启动,因为您的计算机缺少d3dx9_43.dll”。现在,即使是在新安装的windows中,HKEY_LOCAL_MACHINE\Software\Microsoft\DirectX中的DirectX注册表项也会显示版本密钥为“4.09.00.0904”

所以我的问题是,我应该在注册表中的什么位置查看DirectX最终用户运行时中的所有组件是否都已安装


非常感谢您的帮助。

您没有提到您使用的安装程序、脚本或编程语言。知道这一点会很有帮助

如果您不担心下载的大小,最简单的方法可能是总是盲目地安装DirectX运行时。如果它已经存在,那么安装它不会有什么坏处

以下是您可以考虑的其他事项:

如果您使用的是Vista或更高版本(包括Win7、Win8、服务器2K8),那么您可能不需要安装任何东西。因为这些操作系统可能预装了二进制文件。XP SP2及更高版本也是如此。您的“Windows新副本”是否比XP更新

另一个简单的方法是在Windows\System32或Windows\SysWow64目录中搜索是否存在d3dx9_43.dll

通过编程,您可以让安装程序代码检测DLL的安装,如下所示

#include <windows.h>
BOOL HasD3DX9()
{
    HMODULE hMod = LoadLibrary("d3dx9_43.dll");
    return (hMOD != NULL) ? TRUE : FALSE;
}
#包括
BOOL HasD3DX9()
{
HMODULE hMod=LoadLibrary(“d3dx9_43.dll”);
返回值(hMOD!=NULL)?真:假;
}

很抱歉,我忘了提到我是用Python构建它的。但你提到的确实有用。我没有检查库,而是查看dll文件是否存在。没有真正“注册”所有已安装的dll。它们被简单地提取到system32文件夹,就这样(因此下面是唯一正确的答案)。另一方面,在比较了redist安装前后的注册表之后,我发现与音频相关的DLL也可以注册一些CLSID。如果你只是关心他们(或者如果你不害怕潜在的“前辈”),那么检查XAudio2_7的注册表
5a508685-a254-4fba-9b82-9A24B0306AF
实际上是可行的。