1

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

4

3 回答 3

0

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

于 2011-04-01T05:29:32.853 回答
0

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

<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>    

因此,要在此处添加 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 有点不同(在这个“快捷方式”区域中不太完整)。(例如,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 中有一个示例也显示了这种技术。

于 2015-03-04T05:29:04.903 回答
0

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

下面是一个来自我正在开发的应用程序的示例,该示例通过InternetShortcut类添加指向包含图标的网站的链接,并将该链接放置在桌面和开始菜单上。

var project = new Project("MyApplicationName", // Installer name

    new Dir(@"%ProgramFiles%\MyApplicationName", // Install directory
        new Files(@"..\MyApplicationName\bin\Release\netcoreapp3.1\publish\*.*")), // Source directory

    new Dir(@"%ProgramMenu%\MyApplicationName",
        new InternetShortcut
        {
            Name = $"Admin Page",
            Target = "http://localhost:4444",
            Type = InternetShortcut.ShortcutType.link,
            AttributesDefinition = @"IconFile=[INSTALLDIR]\icon.ico;IconIndex=0"
        },
        new ExeFileShortcut
        {
            Name = "Uninstall",
            Target = "[System64Folder]msiexec.exe",
            Arguments = "/x [ProductCode]"
        }),

    new Dir(@"%Desktop%",
        new InternetShortcut
        {
            Name = $"Admin Page",
            Target = "http://localhost:4444",
            Type = InternetShortcut.ShortcutType.link,
            AttributesDefinition = @"IconFile=[INSTALLDIR]\icon.ico;IconIndex=0"
        })
    ); 

也可以看看:

于 2021-03-10T16:37:50.567 回答