Ответ 1
ОК, поэтому благодаря информации Sascha кажется, что ответ "вы не можете" использовать встроенные функции реестра WiX.
Теперь я также хотел, чтобы этот тест произошел вместе с другими испытаниями условий запуска, что делает его немного сложнее. Приобретая это для работы, я занял некоторое время, хотя это довольно просто, теперь я знаю, как, надеюсь, это спасет кого-то еще одну и ту же боль.
Сначала создайте свойство внутри своего продукта WiX:
<Property Id="ODPNETINSTALLED">0</Property>
Затем создайте настраиваемое действие для проверки ключа и установите ODPNETINSTALLED в "1", если оно существует. Я не собираюсь компилировать и добавлять пользовательские действия к установщику здесь, но это довольно просто, если вы используете Votive в Visual Studio. Код для моего пользовательского действия:
using Microsoft.Deployment.WindowsInstaller;
using Microsoft.Win32;
namespace WiXCustomAction
{
public class CustomActions
{
[CustomAction]
public static ActionResult CheckOdpNetInstalled(Session xiSession)
{
xiSession.Log("Begin CheckOdpNetInstalled");
RegistryKey lKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\ORACLE\ODP.Net");
xiSession["ODPNETINSTALLED"] = lKey == null ? "0" : "1";
return ActionResult.Success;
}
}
}
Теперь вам нужно зарегистрировать и запланировать действие, так как я хотел, чтобы предупреждение появлялось вместе с моими другими условиями запуска, я должен был добавить его в элемент UI Sequence:
<Binary Id="WiXCustomAction.dll" SourceFile="$(var.WiXCustomAction.TargetDir)$(var.WiXCustomAction.TargetName).CA.dll" />
<CustomAction Id="CheckOdpNet" BinaryKey="WiXCustomAction.dll" DllEntry="CheckOdpNetInstalled" Execute="immediate" />
<InstallUISequence>
<Custom Action="CheckOdpNet" Before="LaunchConditions">NOT Installed</Custom>
</InstallUISequence>
Наконец, добавьте условие запуска для проверки свойства:
<Condition Message="!(loc.OracleOdpCondition)">
Installed OR ODPNETINSTALLED="1"
</Condition>
Обратите внимание, что я считаю, что планирование в InstallUISequence означает, что пользовательские действия не будут запускаться во время установки, отличной от UI. Однако у моего установщика должен быть установлен пользовательский интерфейс, поэтому для меня это не проблема.