【问题标题】:What else do I need to show the license aside from WixUILicenseRtf?除了 WixUILicenseRtf 之外,我还需要展示什么许可证?
【发布时间】:2018-03-25 18:36:51
【问题描述】:

在我的wxs 文件中,在Product 元素中,我添加了:

<WixVariable Id="WixUILicenseRtf" Value="C:\Users\pupeno\...\src\main\deploy\package\windows\License.rtf" />

我认为该文件正在被读取,因为如果我放置一个不存在的路径,msi 文件将不会生成。但是,在安装过程中没有显示任何内容。我还缺少什么?

我从 javafxpackager 模板开始,所以,它看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<!-- Customizing the wix template due to: https://github.com/FibreFoX/javafx-gradle-plugin/issues/100 -->

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
    <Product Id="PRODUCT_GUID" Name="APPLICATION_NAME"
             Language="1033" Version="APPLICATION_VERSION"
             Manufacturer="APPLICATION_VENDOR"
             UpgradeCode="PUT-GUID-HERE">
        <Package Description="APPLICATION_DESCRIPTION" Comments="None"
                 InstallerVersion="200" Compressed="yes"
                 InstallScope="INSTALL_SCOPE" Platform="PLATFORM"/>
        <Media Id="1" Cabinet="simple.cab" EmbedCab="yes"/>

        <!-- We use RemoveFolderEx to ensure application folder is fully
             removed on uninstall. Including files created outside of MSI
             after application had been installed (e.g. on AU or user state).

             Hovewer, RemoveFolderEx is only available in WiX 3.6,
             we will comment it out if we running older WiX.

             RemoveFolderEx requires that we "remember" the path for uninstall.
             Read the path value and set the APPLICATIONFOLDER property with the value.
        -->
        <Property Id="APPLICATIONFOLDER">
            <RegistrySearch Key="SOFTWARE\APPLICATION_VENDOR\APPLICATION_NAME"
                            Root="REGISTRY_ROOT" Type="raw"
                            Id="APPLICATIONFOLDER_REGSEARCH" Name="Path"/>
        </Property>
        <DirectoryRef Id="APPLICATIONFOLDER">
            <Component Id="CleanupMainApplicationFolder" Guid="*" Win64="WIN64">
                <RegistryValue Root="REGISTRY_ROOT"
                               Key="SOFTWARE\APPLICATION_VENDOR\APPLICATION_NAME"
                               Name="Path" Type="string" Value="[APPLICATIONFOLDER]"
                               KeyPath="yes"/>
                <RegistryValue Root="HKLM"
                               Key="SOFTWARE\APPLICATION_VENDOR\APPLICATION_NAME"
                               Name="AutoConnectTo" Type="string" Value="[AUTO_CONNECT_TO]"/>
                <!-- We need to use APPLICATIONFOLDER variable here or RemoveFolderEx
                     will not remove on "install". But only if WiX 3.6 is used. -->
                WIX36_ONLY_START
                <util:RemoveFolderEx On="uninstall" Property="APPLICATIONFOLDER"/>
                WIX36_ONLY_END
            </Component>
        </DirectoryRef>
        <?include bundle.wxi ?>
        UI_BLOCK
        APP_CDS_BLOCK
        <Icon Id="DesktopIcon.exe" SourceFile="APPLICATION_ICON"/>
        <Icon Id="StartMenuIcon.exe" SourceFile="APPLICATION_ICON"/>
        SECONDARY_LAUNCHER_ICONS
        <MajorUpgrade Schedule="afterInstallInitialize"
                      DowngradeErrorMessage="A later version of app is already installed. Setup will now exit."/>
        <Icon Id="icon.ico" SourceFile="App.ico"/>
        <Property Id="ARPPRODUCTICON" Value="icon.ico"/>
        <Property Id="AUTO_CONNECT_TO">
            <RegistrySearch Id="AutoConnectTo"
                            Root="HKLM"
                            Key="SOFTWARE\APPLICATION_VENDOR\APPLICATION_NAME"
                            Name="AutoConnectTo" Type="raw"/>
        </Property>
        <WixVariable Id="WixUILicenseRtf" Value="C:\Users\pupeno\...\src\main\deploy\package\windows\License.rtf" />
    </Product>
</Wix>

我使用完整路径的原因是因为我不知道相对于 javafxpackager 的期望。我想先看看它工作。

【问题讨论】:

    标签: wix windows-installer


    【解决方案1】:

    更新:在下方添加了有关如何在 Visual Studio 之外编译 WiX 源的新部分。留在 Visual Studio 部分以供参考。


    视觉工作室

    您在 Visual Studio 中吗? 如果是,我尝试制作一个简单的演示,说明如何使用 GUI 进行 最小的 WiX 安装程序以及不久前的许可协议。也许看看它对你是否有意义:WiX installer msi not installing the Winform app created with Visual Studio 2017

    • 尝试顶部的分步列表
    • 根据您的先验知识,您也可以直接查看底部的 WiX 源代码(内联 cmets)
    • 至关重要的是,您需要在找到 GUI 集的地方引用 WixUIExtension.dll

    如果您遵循这些步骤,您应该会成功。如果您不在 Visual Studio 中,则需要在调用 candle.exelight.exe 时正确获取命令行。不是火箭科学,但我喜欢这样称呼它可能有点繁琐。也许在适当的命令行的某个地方有一个简单的示例 - 我现在没有可用的。


    更新:忘了提到除了 WiX 之外,您还需要为 Visual Studio 安装这些扩展:http://wixtoolset.org/releases/。以防万一你还没有。


    命令行编译

    要编译 WiX 源文件并在 Visual Studio 之外包含带有许可协议 RTF 文件的默认 GUI,请使用上面的示例更新 WiX 源,使其链接默认 GUI,然后尝试使用这些命令行进行编译和链接您的 WiX 来源:

    编译

    candle.exe product.wxs -ext WixUIExtension
    

    链接

    light.exe -out Test.msi product.wixobj -ext WixUIExtension
    

    如果一切正常,您应该在您的 WiX XML 源文件旁边获得一个 Test.msi 文件,并且运行它您应该获得一个带有您指定许可协议的默认 GUI。

    而且,虽然很明显,但我只想提一下:您可以通过命令提示符运行不带参数的 candle.exelight.exe 参数的完整列表。

    很清楚:您必须使用上面链接答案中的过程来设置此 GUI 和许可协议文件。在此处重复链接:WiX installer msi not installing the Winform app created with Visual Studio 2017

    将您自己的许可协议添加到您的 MSI 的本质就是这个 WiX XML 简介

    <UIRef Id="WixUI_Mondo" />
    <WixVariable Id="WixUILicenseRtf" Value="TestLicenseAgreement.rtf" />
    
    • UIRef 元素 只是指定了WixUI_Mondo 默认对话框集(在WixUIExtension.dll 中找到)
    • WixVariable 元素 只是指定一个RTF 许可文件(添加路径,如果有的话)
    • 然后你通过light.exe链接器的-ext开关链接WixUIExtension.dll,如上面的命令行所示。

    有几个这样的默认对话框集,但我发现Mondo 是最有效的一个。 How can I add an optional UI to WiX toolset.


    类似的答案:Create a msi from .wxs file using command line

    【讨论】:

    • 不,我没有使用 Visual Studio。这是在一个用 javafxpackager 打包的 Java 应用程序中(这很糟糕,很遗憾)。
    • 好吧,让我刷新一下记忆。只需几分钟。
    猜你喜欢
    • 1970-01-01
    • 2016-04-20
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    相关资源
    最近更新 更多