как создать интернет-ярлык с WixSharp - PullRequest
1 голос
/ 13 марта 2011

Я использую WixSharp, чтобы собрать установщик. Я хотел бы иметь ярлык в меню Program Files \, чтобы открыть веб-страницу. Могу ли я сделать это с WixSharp?

Ответы [ 2 ]

0 голосов
/ 04 марта 2015

Используйте функцию внедрения Wix # XML, чтобы поместить код WiX для ярлыка Интернета в вашу сборку. Использование этого примера синтаксиса WiX для ярлыка Интернета:

<util:InternetShortcut Id="OnlineDocumentationShortcut"
                Name="My Online Documentation"
                       Target="http://wixtoolset.org/"/>

В своем коде установщика Wix # сначала в основном коде вы добавили бы обработчик к событию "WixSourceGenerated", которое срабатывает после создания файла .wxs, но до его компиляции. Этот код будет выглядеть так:

    // 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/")));
}

Вам нужно будет просмотреть созданный вами файл .wxs, который будет находиться в той же папке, что и ваш сгенерированный файл MSI, и выяснить, что такое XPath, чтобы «document.Root.Select ()» добрался до узел, куда вы хотите добавить вставленный 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: http://wixtoolset.org/documentation/manual/v3/howtos/files_and_registry/create_start_menu_shortcut.html

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

Преимущество чистого WiX XML-инъекции для ярлыков будет иметь преимущество, позволяющее вам немного больше контролировать то, что создается.

В примерах Wix # есть пример в Samples \ InjectXML \ Setup.cs, который также демонстрирует эту технику.

0 голосов
/ 01 апреля 2011

Посмотрите на\ Образцы \ Ярлыки в загружаемых файлах.

...