我使用InstallShield 2013 (基本MSI项目)为我的产品创建安装包。产品需要安装DirectX终端用户运行时,所以我在DirectX解决方案中为DirectX创建了自定义先决条件。
我不想在每次安装我的产品时安装DirectX终端用户运行时,所以我想在先决条件编辑器中为DirectX添加一个条件。我的产品是一个64位的应用程序,它需要C:\Windows\System32 32文件夹中的一些directX文件(至少我知道没有D3DCompiler_43.dll和D3DX9_43.dll它就不能工作)。
因此,我要为我的先决条件添加一些条件:
如果目标框中缺少WindowsFoldersystem32\D3DCompiler_43.dll和WindowsFoldersystem32\D3DX9_43.dll文件,则安装DirectX最终用户运行时。
我在两个64位Win7盒上测试了我的安装包。DirectX先决条件条件在第一个框上运行良好-只有在C:\Windows\System32 32中缺少D3DCompiler_43.dll和D3DX9_43.dll时,它才能安装D3DCompiler_43.dll。但是,当我在第二个64位框上安装相同的包时会出现问题:由于某些原因,先决条件条件在那里不能正常工作--它试图找到D3DCompiler_43.dll和D3DX9_43.dll,不是在C:Windows\System32 32中,而是在C:Windows\SysWOW64 64文件夹中。有人能解释为什么即使我硬编码到C:\Windows\System32 32的路径在SysWOW64中吗?
还有一个问题--也许有人知道如何更好地检查目标框中是否安装了DirectX最终用户运行时?我在这里找到了类似的主题check registry for DirectX End-User Runtime,但我不知道在先决条件编辑器中如何使用LoadLibrary("d3dx9_43.dll")函数.
发布于 2015-03-17 20:17:41
在2013年的InstallShield中,有两种先决条件:
不能在安装先决条件中调用DLL,因为安装先决条件在MSI之前运行,因此在任何自定义操作之前运行。
如果您创建了一个特性先决条件,您可以设置一个自定义操作来调用DLL (例如您提到的d3dx9_43.dll )。我不熟悉这个DLL,所以我不能告诉您您的自定义操作会是什么样子。可以根据DLL调用的结果打开或关闭此功能。
https://stackoverflow.com/questions/22558340
复制相似问题