1

WixSharpを使用してインストーラーをまとめています。ProgramFiles\メニューにショートカットを作成してWebページを開きたいのですが。WixSharpでそれを行うことはできますか?

4

3 に答える 3

0

ダウンロード可能なものの<Wix#> \ Samples\Shortcutsをご覧ください。

于 2011-04-01T05:29:32.853 に答える
0

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

http://wixtoolset.org/documentation/manual/v3/howtos/files_and_registry/create_internet_shortcut.html

ショートカットに対する純粋な WiX XML インジェクション アプローチには、作成されるものをもう少し制御できるという利点があります。

Wix# サンプルでは、​​Samples\InjectXML\Setup.cs にサンプルがあり、この手法も示しています。

于 2015-03-04T05:29:04.903 に答える