WiX は BootstrapperApplicationData.xml ファイルを生成します。このファイルには、exe のビルドに使用される多くの情報が含まれており、実行時に利用可能なファイルに含まれています。そのメタデータにアクセスするために、実行時にそのファイルを解析できます。ファイルはすべてのアセンブリと .msi ファイルと共にランダムな名前の一時フォルダーに配置されるため、ファイルがどこに保存されるかを事前に知ることはできないため、アセンブリのパスを使用してファイルを見つける必要があります。その後、XML を解析してメタデータを取得できます。
ここに追加の詳細を記載したブログ投稿があります: https://www.wrightfully.com/part-3-of-writing-your-own-net-based-installer-with-wix-context-data/
私の場合、「」の代わりにタグを使用しているため、利用可能な情報の一部があなたのためにそこにない可能性があるため、経験が異なる場合があります. その場しのぎのインストーラーをデバッグ モードで実行し、ブレークポイントを設定して XML の内容を検査し、使用可能なものの完全なリストを取得することをお勧めします。
ManagedBootstrapperApplication (c#) でファイルからデータを取得する方法の例を次に示します。注: この例では、私のドメイン オブジェクトは MBAPrereqPackage、BundlePackage、および PackageFeature であり、それぞれがコンストラクターで XML ノード オブジェクトを取得し、さらにデータをオブジェクトのプロパティに解析します。
const XNamespace ManifestNamespace = ( XNamespace) “http://schemas.microsoft.com/wix/2010/BootstrapperApplicationData” ;
public void Initialize()
{
//
// parse the ApplicationData to find included packages and features
//
var bundleManifestData = this.ApplicationData;
var bundleDisplayName = bundleManifestData
.Element(ManifestNamespace + “WixBundleProperties“ )
.Attribute( “DisplayName“)
.Value;
var mbaPrereqs = bundleManifestData.Descendants(ManifestNamespace + “WixMbaPrereqInformation“)
.Select(x => new MBAPrereqPackage(x))
.ToList();
//
//exclude the MBA prereq packages, such as the .Net 4 installer
//
var pkgs = bundleManifestData.Descendants(ManifestNamespace + “WixPackageProperties“)
.Select(x => new BundlePackage(x))
.Where(pkg => !mbaPrereqs.Any(preReq => preReq.PackageId == pkg.Id));
//
// Add the packages to a collection of BundlePackages
//
BundlePackages.AddRange(pkgs);
//
// check for features and associate them with their parent packages
//
var featureNodes = bundleManifestData.Descendants(ManifestNamespace + “WixPackageFeatureInfo“);
foreach ( var featureNode in featureNodes)
{
var feature = new PackageFeature(featureNode);
var parentPkg = BundlePackages.First(pkg => pkg.Id == feature.PackageId);
parentPkg.AllFeatures.Add(feature);
feature.Package = parentPkg;
}
}
///
/// Fetch BootstrapperApplicationData.xml and parse into XDocument.
///
public XElement ApplicationData
{
get
{
var workingFolder = Path.GetDirectoryName(this.GetType().Assembly.Location);
var bootstrapperDataFilePath = Path.Combine(workingFolder, “BootstrapperApplicationData.xml”);
using (var reader = new StreamReader(bootstrapperDataFilePath))
{
var xml = reader.ReadToEnd();
var xDoc = XDocument.Parse(xml);
return xDoc.Element(ManifestNamespace + “BootstrapperApplicationData“);
}
}
}