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

时间:2014-03-21 12:07:33

标签: directx installshield prerequisites

我使用InstallShield 2013(基本MSI项目)为我的产品创建安装包。 产品需要安装DirectX End-User-Runtime,因此我在InstallShield解决方案中为DirectX创建了自定义先决条件。

我不希望每次安装产品​​时都安装DirectX End-User-Runtime,因此我想在Prerequisite Editor中为DirectX添加条件。我的产品是一个64位应用程序,它需要在C:\ Windows \ System32文件夹中的一些directX文件(至少我知道它没有D3DCompiler_43.dll和D3DX9_43.dll就无法工作。)

所以,我为我的先决条件添加条件:

如果是文件,请安装DirectX End-User-Runtime [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中找不到D3DCompiler_43.dll和D3DX9_43.dll但是在C:Windows \ SysWOW64文件夹中。 即使我将路径硬编码到C:\ Windows \ System32,有人可以解释为什么它在SysWOW64中看起来?

还有一个问题 - 可能有人知道如何检查目标盒上是否安装了DirectX End-User-Runtime?我在check registry for DirectX End-User Runtime找到了类似的主题,但我无法理解前提条件编辑器中的方式和位置,我可以使用LoadLibrary(" d3dx9_43.dll")函数......

1 个答案:

答案 0 :(得分:0)

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

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

如果您创建功能先决条件,则可以设置自定义操作来调用DLL(例如您提到的d3dx9_43.dll)。我不熟悉这个DLL,所以我不能告诉你你的自定义操作会是什么样子。您可以根据DLL调用的结果打开或关闭此功能。