如何使用WixSharp创建Internet快捷方式

时间:2011-03-13 05:34:31

标签: wixsharp

我正在使用WixSharp组合安装程序。我想在Program Files \菜单中有一个快捷方式来打开一个网页。我可以用WixSharp做到吗?

3 个答案:

答案 0 :(得分:0)

在可下载文件中查看< Wix#> \ Samples \ Shortcuts。

答案 1 :(得分:0)

使用Wix#XML注入功能将Internet快捷方式的WiX代码放入构建中。将此WiX语法示例用于Internet快捷方式:

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

在您的Wix#安装程序代码中,首先,在主代码中,您将向&#34; WixSourceGenerated&#34;添加处理程序。 event,在创建.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的内容,对于&#34; document.Root.Select()&# 34;到达要添加插入的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>    

因此,要在那里添加Internet快捷方式,您希望生成的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略有不同(并且在#34;快捷方式和#34;区域中不太完整)。 (例如,Wix#插入一个Wi​​X没有的元素,而WiX允许您更清楚地指定快捷方式的起始文件夹和其他值)我使用的示例XML来自Wix#installer我添加了“开始”菜单快捷方式。如果您想为快捷方式执行更纯粹的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中,Samples \ InjectXML \ Setup.cs中有一个示例,它也显示了这种技术。

答案 2 :(得分:0)

在 WixSharp 中,您可以通过 InternetShortcut 类创建 InternetShortcut。

以下是我正在开发的应用的示例,该应用通过 df <- structure(list(sample_size = c(134L, 1586L, 588L, 345L, 2500L ), club = c("A", "B", "C", "B", "C"), bad = c(10L, 12L, 43L, 30L, 21L), below_avg = c(30L, 30L, 10L, 51L, 19L), neutral = c(45L, 24L, 17L, 10L, 30L), good = c(5L, 4L, 16L, 5L, 15L), very_good = c(10L, 30L, 14L, 4L, 15L)), class = "data.frame", row.names = c(NA, -5L)) library(dplyr) df %>% group_by(club) %>% summarise_all(., ~if(is.numeric(.)) sum(.)) %>% rowwise() %>% mutate( total_percentage = sum(bad, neutral, good) / sum(bad, neutral, good, below_avg, very_good) )%>% select(club, sample_size, bad, neutral, good, total_percentage) #> # A tibble: 3 x 6 #> # Rowwise: #> club sample_size bad neutral good total_percentage #> <chr> <int> <int> <int> <int> <dbl> #> 1 A 134 10 45 5 0.6 #> 2 B 1931 42 34 9 0.425 #> 3 C 3088 64 47 31 0.71 类添加指向包含图标的网站的链接,并将该链接放置在桌面和开始菜单上。

InternetShortcut

另见: