Я использую InstallShield 2013 (Basic MSI Project) для создания установочного пакета для своего продукта. Продукт требует установки DirectX End-User-Runtime, поэтому я создал специальное предварительное условие для DirectX в своем решении InstallShield.
Я не хочу устанавливать DirectX End-User-Runtime каждый раз при установке своего продукта, поэтому я хочу добавить условие для DirectX в Prerequisite Editor. Мой продукт представляет собой 64-битное приложение, и для него требуются файлы DirectX в папке C:\Windows\System32 (по крайней мере, я знаю, что без D3DCompiler_43.dll и D3DX9_43.dll он работать не будет).
Итак, я добавляю условия для моего предварительного условия:
Установите DirectX End-User-Runtime, если файлы [WindowsFolder]system32\D3DCompiler_43.dll и [WindowsFolder]system32\D3DX9_43.dll отсутствуют в целевом окне.
Я протестировал свой установочный пакет на двух 64-битных компьютерах с Win7. Условие DirectX Prerequisite отлично работает на первом поле - он устанавливает DirectX только в том случае, если в C:\Windows\System32 пропущены и D3DCompiler_43.dll, и D3DX9_43.dll. Но проблема возникает, когда я устанавливаю тот же пакет на второй 64-битный бокс: по некоторым причинам условие пререквизита там не работает должным образом - он пытается найти D3DCompiler_43.dll и D3DX9_43.dll не в C:Windows\System32, а в C : Папка Windows\SysWOW64. Может кто-нибудь объяснить, почему он выглядит в SysWOW64, даже если я жестко задал путь к C:\Windows\System32?
И еще один вопрос - возможно, кто-то знает лучший способ, как проверить, установлен ли DirectX End-User-Runtime на целевой машине? Я нашел похожую тему здесь проверьте реестр для DirectX End-User Runtime но я не могу понять, как и где в Prerequisite Editor я могу использовать функцию LoadLibrary("d3dx9_43.dll")...