WixSharpを使用してインストーラーをまとめています。ProgramFiles\メニューにショートカットを作成してWebページを開きたいのですが。WixSharpでそれを行うことはできますか?
3 に答える
ダウンロード可能なものの<Wix#> \ Samples\Shortcutsをご覧ください。
Wix# XML インジェクション機能を使用して、インターネット ショートカットの WiX コードをビルドに配置します。この WiX 構文の例をインターネット ショートカットに使用すると、次のようになります。
<util:InternetShortcut Id="OnlineDocumentationShortcut"
Name="My Online Documentation"
Target="http://wixtoolset.org/"/>
Wix# インストーラー コードでは、まずメイン コードで、.wxs ファイルが作成された後、コンパイルされる前に発生する「WixSourceGenerated」イベントにハンドラーを追加します。そのコードは次のようになります。
// Hook up a delegate to the "WixSourceGenerated" event, fires when .wxs file is fully created
Compiler.WixSourceGenerated += InjectXMLElement;
// Make sure the .wxs file gets preserved
Compiler.PreserveTempFiles = true;
// Trigger the MSI file build
Compiler.BuildMsi(project);
次に、デリゲート メソッドでは、次のようなコードになります。
/// <summary>
/// Insert XML elements and attributes into the generated .wxs file
/// </summary>
/// <param name="document"></param>
static void InjectXMLElement(System.Xml.Linq.XDocument document)
{
// To add an Internet shortcut on target system, add this element:
// <util:InternetShortcut Id="OnlineDocumentationShortcut"
// Name="My Online Documentation"
// Target="http://wixtoolset.org/"/>
var componentElement = document.Root.Select("Product/Directory/Directory/Component");
componentElement.Add(new XElement("util:InternetShortcut",
new XAttribute("Id", "OnlineDocumentationShortcut"),
new XAttribute("Target", "http://wixtoolset.org/")));
}
生成された MSI ファイルと同じフォルダーにある、生成された .wxs ファイルを調べて、"document.Root.Select()" が作成したノードに到達するための XPath を特定する必要があります。挿入された WiX XML を追加したい。私の wxs ファイルでは、スタート メニューのショートカットは次のような XML のセクションにあります。
<Directory Id="ProgramMenuFolder" Name="ProgramMenuFolder">
<Directory Id="ProgramMenuFolder.My_App_Name" Name="My App Name">
<Component Id="My_App_Name.EmptyDirectory" Guid="18342da3-5a42-4397-b522-5927ace999">
<CreateFolder />
<RemoveFolder Id="ProgramMenuFolder.My_App_Name" On="uninstall" />
<RegistryKey Root="HKCU" Key="Software\WixSharp\Used">
<RegistryValue Value="0" Type="string" KeyPath="yes" />
</RegistryKey>
</Component>
</Directory>
そこにインターネット ショートカットを追加するには、結果の XML を次のようにします。
<Directory Id="ProgramMenuFolder" Name="ProgramMenuFolder">
<Directory Id="ProgramMenuFolder.My_App_Name" Name="My App Name">
<Component Id="My_App_Name.EmptyDirectory" Guid="18342da3-5a42-4397-b522-5927ace999">
<CreateFolder />
<util:InternetShortcut Id="OnlineDocumentationShortcut"
Name="My Online Documentation"
Target="http://wixtoolset.org/"/>
<RemoveFolder Id="ProgramMenuFolder.My_App_Name" On="uninstall" />
<RegistryKey Root="HKCU" Key="Software\WixSharp\Used">
<RegistryValue Value="0" Type="string" KeyPath="yes" />
</RegistryKey>
</Component>
</Directory>
おそらく私が見たほど難しくも複雑でもないと思います。XPath ノード ロケーターが XML を挿入する適切な場所を指すようにするには、少し試行錯誤する必要があります。また、Wix# の XML 構文が WiX とは少し異なる (そして、この「ショートカット」領域では完全ではない) ように思われることに気付きました。(たとえば、Wix# は WiX が挿入しない要素を挿入し、WiX ではショートカットの開始フォルダーやその他の値をより明確に指定できます) 私が使用した XML の例は、スタート メニューを追加する私が持っている Wix# インストーラーからのものです。ショートカット。ショートカットに対してより純粋な WiX アプローチを実行し、このアプローチを使用してそれらをすべて挿入する場合は、次の WiX リンクを参照して ください。 html
ショートカットに対する純粋な WiX XML インジェクション アプローチには、作成されるものをもう少し制御できるという利点があります。
Wix# サンプルでは、Samples\InjectXML\Setup.cs にサンプルがあり、この手法も示しています。