Условие для установки среды выполнения DirectX для конечных пользователей

Я использую 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")...


person AndreyS    schedule 21.03.2014    source источник
comment
Я предполагаю, что перенаправление жестко закодированного пути System32 связано с совместимостью приложений. Пока 64-разрядная версия не была доступна, приложения могли жестко запрограммировать путь System32 и работать нормально. Однако в 64-битной системе они будут указывать на неправильный каталог. Перенаправление на SysWOW64 исправляет это.   -  person MooseBoys    schedule 21.03.2014


Ответы (1)


В InstallShield 2013 существует 2 типа предварительных условий:
- Необходимые условия установки устанавливаются перед основной установкой
- Необходимые компоненты устанавливаются только в том случае, если этот компонент выбран для установка.

Вы не можете вызывать библиотеку DLL в необходимых условиях установки, поскольку необходимые условия установки выполняются перед вашим MSI и, следовательно, перед любыми вашими пользовательскими действиями.

Если вы создаете предварительное требование для функции, вы можете настроить настраиваемое действие для вызова библиотеки DLL (например, упомянутой вами d3dx9_43.dll). Я не знаком с этой DLL, поэтому не могу сказать, как будет выглядеть ваше пользовательское действие. Вы можете включить или выключить эту функцию в зависимости от результата вашего вызова DLL.

person Superbob    schedule 17.03.2015