OK, então, graças às informações de Sascha, parece que a resposta é "você não pode" usando as funções de registro WiX integradas.
Agora eu também queria que este teste acontecesse junto com os outros testes de condição de lançamento, o que o torna um pouco mais difícil. Fazer isso funcionar me levou um bom tempo, embora seja bastante simples agora que eu sei, então espero que isso poupe a outra pessoa a mesma dor.
Primeiro crie uma propriedade dentro do seu produto WiX:
<Property Id="ODPNETINSTALLED">0</Property>
Em seguida, crie uma ação personalizada para verificar a chave e defina ODPNETINSTALLED como "1", se existir. Não vou compilar e adicionar a ação personalizada ao instalador aqui, mas é bastante simples se você usar o Votive no Visual Studio. O código da minha ação personalizada é:
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;
}
}
}
Agora você precisa se registrar e agendar a ação, porque eu queria que o aviso aparecesse junto com minhas outras condições de lançamento, tive que adicioná-lo à instalaçãoIU Elemento de sequência:
<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>
Por fim, adicione uma condição de inicialização para verificar a propriedade:
<Condition Message="!(loc.OracleOdpCondition)">
Installed OR ODPNETINSTALLED="1"
</Condition>
Observe que acredito que o agendamento em InstallUISequence significa que a ação personalizada não será acionada durante instalações sem interface do usuário. No entanto, meu instalador deve ter a instalação da interface do usuário, portanto, não é um problema para mim.