2011-03-13 4 views
1

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

+0

Как первое направление, попробуйте посмотреть [документацию WiX о создании ярлыков Интернета] (http://wix.sourceforge.net/manual-wix3/create_internet_shortcut.htm), чтобы посмотреть, как они это делают. –

ответ

0

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

+1

Спасибо, но образцы показывают, как сделать ярлыки для установленных файлов, но не для внешнего интернет-адреса. –

0

Используйте функцию вставки 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, который также показывает эту технику.