Итак, благодаря информации Саши кажется, что ответ - «вы не можете» использовать встроенные функции реестра 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;
}
}
}
Теперь вам нужно зарегистрироваться и запланировать действие, поскольку я хотел, чтобы предупреждение отображалось вместе с другими моими условиями запуска, мне пришлось добавить его в элемент Install 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 означает, что настраиваемое действие не будет запускаться во время установки без пользовательского интерфейса. Однако у моего установщика должен быть установлен пользовательский интерфейс, поэтому для меня это не проблема.
person
Dan
schedule
27.08.2009