是否可以为Win Form应用程序构建ClickOnce部署,以便在继续之前要求用户同意许可协议?
Answer from MSDN来自用户Heath8041:
Sneaky方法在VS2005中为您的clickonce应用程序显示EULA
以下是关于使用最终用户许可协议安装clickonce应用程序的方法。基本上,您构建了一个可再发布的组件,可以在发布窗口下的prerequsites对话框中看到。如果您愿意,这可以让您的所有应用重用相同的协议。这很简单,你只需创建三个文件(“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文件。 Rtf不会使用此方法显示属性。
现在在我的“en”子文件夹中,我将eula.txt文件和另一个名为package.xml的xml文件放在一起,再次将此xml文件用于执行各种操作
继承我的版本内容*
<?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 \ Packages。您可以查看其他组件的product.xml和package.xml文件,看看他们用它们做了什么很酷的事情。祝好运
对于任何试图这样做的人来说,它都可以工作......我正在使用Visual Studio 2008和谎言Coppermill说,位置是“C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ Bootstrapper \ Packages \”
我还必须在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 CopyAllPackageFiles="false">
<PackageFile Name="en/Empty.exe"/>
</PackageFiles>
<Commands>
<Command PackageFile="en/Empty.exe" Arguments='/silent' >
<ExitCodes>
<ExitCode Value="0" Result="Success"/>
<DefaultExitCode Result="Fail" FormatMessageFromSystem="true" String="GeneralFailure" />
</ExitCodes>
</Command>
</Commands>
</Product>
我还必须创建一个“Do nothing”可执行文件,否则elcu.txt将在记事本中打开。祝你好运...
我不认为有。
如果您从网页部署点击一次应用,则可以让用户在安装应用之前接受协议。效果是一样的。
如果我们使用Visual Studio 2010,那么我们将其添加到"C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages"
文件夹中。它现在有效。
我发帖这是对Yuki Izumi的帖子的回复。我没有使用批处理文件,而是添加了一个空的vbs文件并将product.xml修改为
<Command PackageFile="en/empty.vbs" Arguments='' >
这是防止eula.txt在单击Accept时打开的另一种方法。我也试过一个rtf文件。显示得当(VS 2015)。
您可以在此处检查通用引导程序路径:
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\GenericBootstrapper
MSDN:https://docs.microsoft.com/en-us/visualstudio/deployment/creating-bootstrapper-packages?view=vs-2017