安装DirectX最终用户运行时的条件

安装DirectX最终用户运行时的条件,directx,installshield,prerequisites,Directx,Installshield,Prerequisites,我正在使用InstallShield 2013(基本MSI项目)为我的产品创建安装包。 该产品需要安装DirectX最终用户运行时,所以我在InstallShield解决方案中为DirectX创建了自定义的先决条件 我不希望每次安装产品时都安装DirectX最终用户运行时,因此我希望在必备编辑器中为DirectX添加一个条件。我的产品是一个64位应用程序,它需要C:\Windows\System32文件夹中的一些directX文件(至少我知道,如果没有D3DCompiler_43.dll和D3D

我正在使用InstallShield 2013(基本MSI项目)为我的产品创建安装包。 该产品需要安装DirectX最终用户运行时,所以我在InstallShield解决方案中为DirectX创建了自定义的先决条件

我不希望每次安装产品时都安装DirectX最终用户运行时,因此我希望在必备编辑器中为DirectX添加一个条件。我的产品是一个64位应用程序,它需要C:\Windows\System32文件夹中的一些directX文件(至少我知道,如果没有D3DCompiler_43.dll和D3DX9_43.dll,它将无法工作)

因此,我为我的先决条件添加了条件:

如果需要文件,请安装DirectX最终用户运行时 [WindowsFolder]system32\D3DCompiler_43.dll[WindowsFolder]system32\D3DX9_43.dll 目标框上没有找到

我在两个64位Win7机器上测试了我的安装包。DirectX先决条件在第一个框中运行良好-只有在C:\Windows\System32中同时缺少D3DCompiler_43.dll和D3DX9_43.dll时,它才会安装DirectX。但当我在第二个64位框上安装相同的软件包时,问题出现了:由于某些原因,先决条件在那里不能正常工作-它试图在C:Windows\System32而在C:Windows\SysWOW64文件夹中查找D3DCompiler_43.dll和D3DX9_43.dll。 有人能解释一下为什么即使我硬编码了C:\Windows\System32的路径,它也会出现在SysWOW64中吗


还有一个问题——也许有人知道如何更好地检查DirectX最终用户运行时是否安装在目标框上?我在这里找到了类似的主题,但我无法理解在必备编辑器中如何以及在何处使用LoadLibrary(“d3dx9_43.dll”)函数…

在InstallShield 2013中,有两种必备类型:
-安装先决条件在主安装之前安装
-功能先决条件仅在为选择该功能时安装 安装

您不能在安装先决条件中调用DLL,因为安装先决条件在MSI之前运行,因此在任何自定义操作之前运行


如果创建功能先决条件,则可以设置自定义操作以调用DLL(如您提到的d3dx9_43.DLL)。我不熟悉此DLL,因此无法告诉您自定义操作的外观。您可以根据DLL调用的结果打开或关闭此功能。

我猜重定向硬编码的System32路径是由于app compat。在64位可用之前,应用程序可以硬编码System32路径并正常工作。但是,在64位系统上,它们将指向错误的目录。重定向到SysWOW64将修复此问题。