Добре, така че благодарение на информацията на 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 Елемент на последователността:
<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 означава, че персонализираното действие няма да се задейства по време на инсталирания извън потребителския интерфейс. Въпреки това моят инсталатор трябва да има инсталиран потребителски интерфейс, така че това не е проблем за мен.