Я использую WixSharp для сборки установщика. Я хотел бы иметь ярлык в меню Program Files \, чтобы открыть веб-страницу. Могу ли я сделать это с помощью WixSharp?Как создать интернет-ярлык с помощью WixSharp
ответ
Посмотрите на < Wix # > \ Образцы \ Ярлыки в загружаемых файлах.
Спасибо, но образцы показывают, как сделать ярлыки для установленных файлов, но не для внешнего интернет-адреса. –
Используйте функцию вставки 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
Чистый инъекции подход WiX XML для быстрого доступа будет имеют преимущество, позволяя вам немного больше контролировать то, что создается.
В образцах Wix # есть образец в Samples \ InjectXML \ Setup.cs, который также показывает эту технику.
Как первое направление, попробуйте посмотреть [документацию WiX о создании ярлыков Интернета] (http://wix.sourceforge.net/manual-wix3/create_internet_shortcut.htm), чтобы посмотреть, как они это делают. –