Clickonce要求许可协议

Clickonce要求许可协议

问题描述:

是否可以为Win Form应用程序构建ClickOnce部署,以要求用户同意许可协议,然后再继续?

Is it possible to build a ClickOnce deployment, for a Win Form application, to ask for the user to agree to a License Agreement before continuing?

用户 Heath8041 来自MSDN的答案:

Answer from MSDN by User Heath8041:

在VS2005中为您的clickonce应用程序显示EULA的狡猾方法

以下是通过最终用户许可协议安装clickonce应用程序的一种方法。
基本上,您将构建一个可再发行组件,该组件可在发布窗口下的先决条件对话框中看到。如果需要的话,这是一种让所有应用重复使用同一协议的好方法。
这很容易,您只需要创建三个文件( eula.txt, product.xml和 package.xml)和两个文件夹(在这种情况下分别为 EULApackage和 en) )。我在下面记录了有关如何设置我的一切的内容。它很棒。唯一需要更改的就是组件名称,当然,您还需要保存为eula.txt的最终用户许可协议。
组件需要放在以下路径中:
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages
在此文件夹中,您应该看到一些其他可再发行组件的子文件夹。首先为您的组件创建一个新的子目录。我叫我EULApackage。
在这个新文件夹中,您需要执行以下操作。
-一个名为product.xml的文件和一个名为 en的子文件夹(英语)
您可以使用product.xml文件执行各种操作,但这是我的样子

<?xml version="1.0" encoding="utf-8" ?>

<Product
  xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
  ProductCode="EULA.Bootstrap.Component"
>
  <!-- Defines list of files to be copied on build -->
  <PackageFiles>
    <PackageFile Name="en/eula.txt"/>
  </PackageFiles>


  <Commands>
    <Command PackageFile="en/eula.txt"
      Arguments='' >

       <ExitCodes>
         <DefaultExitCode Result="Fail" FormatMessageFromSystem="true" String="GeneralFailure" />
       </ExitCodes>

    </Command>
  </Commands>
</Product>

*在这种情况下,文件eula.txt是我的许可协议的文本文件。请注意,它不是rtf文件。

*in this case the file eula.txt was the text file that was my license agreement. Note that it's not an rtf file. Rtf won't display propertly using this method.

现在在我的 en子文件夹中,我将eula.txt文件和另一个xml文件称为package.xml,再次xml文件可用于执行各种操作

Now inside my "en" subfolder i put the eula.txt file and another xml file called package.xml, again this xml file can be used to do all kinds of stuff

此处是我的版本的内容*

heres the contents of my version*

 <?xml version="1.0" encoding="utf-8" ?>

<Package
  xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
  Name="DisplayName"
  Culture="Culture"
  LicenseAgreement="eula.txt">

    <PackageFiles>
        <PackageFile Name="eula.txt"/>
    </PackageFiles>

  <!-- Defines a localizable string table for error messages and url's  -->
  <Strings>
    <String Name="DisplayName">Texas Instruments End User License Agreement</String>
    <String Name="Culture">en</String>

    <String Name="CancelFailure">User Failed to Accept Texas Instruments End User License Agreement.</String>
    <String Name="GeneralFailure">A fatal error occurred during the installation of ELUA Component Execution</String>
    <String Name="AdminRequired">You do not have the permissions required to install this application.  Please contact your administrator.</String>
  </Strings>    
</Package>

注意:您在DisplayName字段中输入的内容将是用户面对时看到的内容带有eula文本
如果将所有这些正确正确地放置在正确的文件夹中,则下次启动VS2005并转到发布选项卡->先决条件时,您应该看到DisplayName字段。只需将此作为您应用的先决条件即可。
,当用户单击publish.htm文件上的安装时,它将在标准许可接受对话框中向用户显示eula.txt文件的内容。如果选择接受您的东西安装,如果他们拒绝,那么它就会退出,并且系统上没有任何安装。
如果您弄乱了两个文件的格式,或者遗漏了 en子文件夹,则该组件将不会显示在前提条件对话框中(发布时)

附加说明:尽管此方法效果很好,但它是一轮关于方法的方法,它们绕过eula,例如您的publish.htm文件是否允许它们运行应用程序直接(我猜没有启动引导程序),但是如果他们单击安装按钮,它将运行。
还有一个好处,就是您每次将更新发布到clickonce应用程序时都不会运行。他们必须运行引导程序来显示eula(通过单击publish.htm上的安装按钮)
通过查看路径C中已经存在的其他一些可再发行组件,我找到了此方法。 :\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\软件包。您可以查看其他组件的product.xml和package.xml文件,以了解它们对它们的作用。
祝你好运