さて、Saschaの情報のおかげで、組み込みのWiXレジストリ機能を使用することは「できない」という答えのようです。
今、私はこのテストを他の起動条件テストと一緒に実行したかったので、少し難しくなりました。これを機能させるにはかなりの時間がかかりましたが、方法がわかったのでかなり簡単になりました。これにより、他の誰かが同じ苦痛を軽減できることを願っています。
まず、WiX製品内にプロパティを作成します:
<Property Id="ODPNETINSTALLED">0</Property>
次に、キーをチェックするカスタムアクションを作成し、ODPNETINSTALLEDが存在する場合は「1」に設定します。ここでは、カスタムアクションをコンパイルしてインストーラーに追加することはしませんが、VisualStudioでVotiveを使用する場合はかなり簡単です。カスタムアクションのコードは次のとおりです:
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でのスケジューリングは、UI以外のインストール中にカスタムアクションが実行されないことを意味すると私は信じていることに注意してください。ただし、インストーラーにはUIがインストールされている必要があるため、問題にはなりません。