演练:创建带有隐私提示的自定义引导程序
可以配置 ClickOnce 应用程序,以便在具有较新文件版本和程序集版本的程序集可用时自动更新。 若要确保你的客户同意此行为,你可以向他们显示隐私提示。 然后,他们可以选择是否向应用程序授予自动更新的权限。 如果不允许应用程序自动更新,则不会安装该应用程序。
注意
本文中的某些 Visual Studio 用户界面元素在计算机上出现的名称或位置可能会不同。 你可能正在使用其他版本的 Visual Studio 或其他环境设置。 有关详细信息,请参阅个性化设置 IDE。
创建一个“更新同意”对话框
若要显示隐私提示,请创建一个应用程序,要求读者同意应用程序自动更新。
创建同意对话框
在 “文件” 菜单上,指向 “新建” ,再单击 “项目” 。
在“新建项目”对话框中,单击“Windows”,然后单击“WindowsFormsApplication”。
在“名称”中键入“ConsentDialog”,然后单击“确定”。
在设计器中,单击窗体。
在“属性”窗口中,将“文本”属性更改为“更新同意对话框”。
在工具箱中,展开“所有 Windows 窗体”,然后将“标签”控件拖动到窗体中。
在设计器中,单击标签控件。
在“属性”窗口中,将“外观”下的“文本”属性更改为以下内容:
要安装的应用程序会在 Web 上检查最新更新。 单击“我同意”即可授权应用程序自动从 Internet 检查和安装更新。
在工具箱中,将“复选框”控件拖到窗体中间。
在“属性”窗口中,将“布局”下的“文本”属性更改为“我同意”。
在工具箱中,将“按钮”控件拖到窗体左下角。
在“属性”窗口中,将“布局”下的“文本”属性更改为“继续”。
在“属性”窗口中,将“设计”下的“(名称)”属性更改为“ProceedButton”。
在工具箱中,将“按钮”控件拖到窗体右下角。
在“属性”窗口中,将“布局”下的“文本”属性更改为“取消”。
在“属性”窗口中,将“设计”下的“(名称)”属性更改为“CancelButton”。
在设计器中,双击“我同意”复选框以生成 CheckedChanged 事件处理程序。
在 Form1 代码文件中,为 CheckedChanged 事件处理程序添加以下代码。
更新类构造函数,以默认禁用“继续”按钮。
在 Form1 代码文件中,为布尔变量添加以下代码,以跟踪最终用户是否同意联机更新。
在设计器中,双击“继续”按钮生成 Click 处理程序。
在 Form1 代码文件中,为“继续”按钮的 Click 事件处理程序添加以下代码。
在设计器中,双击“取消”按钮生成 Click 处理程序。
在 Form1 代码文件中,为“取消”按钮的 Click 事件处理程序添加以下代码。
如果最终用户不同意联机更新,则更新应用程序以返回错误。
仅适用于 Visual Basic 开发人员:
在“解决方案资源管理器”中,单击“ConsentDialog”。
在“项目”菜单上,单击“添加模块”,然后单击“添加” 。
在 Module1.vb 代码文件中,添加以下代码。
Module Module1 Function Main() As Integer Application.EnableVisualStyles() Application.SetCompatibleTextRenderingDefault(False) Dim f As New Form1() Application.Run(f) If (Not f.accepted) Then Return -1 Else Return 0 End If End Function End Module
在“项目”菜单上,单击“ConsentDialog 属性”,然后单击“应用程序”选项卡。
取消选中“启用应用程序框架”。
在“启动对象”下拉菜单中,选择“Module1” 。
注意
禁用应用程序框架时,将禁用一些功能,例如视觉对象样式、应用程序事件、初始屏幕、单实例应用程序等。 有关详细信息,请参阅 Application Page, Project Designer (Visual Basic)(应用程序页、项目设计器 (Visual Basic)。
仅适用于 Visual C# 开发人员:
打开 Program.cs 代码文件,并添加以下代码。
static int Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Form1 f = new Form1(); Application.Run(f); if (!f.accepted) return -1; else return 0; }
在“生成”菜单上,单击“BuildSolution”。
创建自定义引导程序包
为了向最终用户显示隐私提示,可以为“更新同意”对话框应用程序创建一个自定义引导程序包,并将其作为必备组件包含在所有 ClickOnce 应用程序中。
此过程演示如何通过创建以下文档来创建自定义引导程序包:
一个 product.xml 清单文件,用于描述引导程序的内容。
一个 package.xml 清单文件,用于列出包的本地化特定方面,如字符串和软件许可条款。
一份软件许可条款文档。
步骤 1:创建引导程序目录
在“%PROGRAMFILES%\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages”中创建一个名为“UpdateConsentDialog”的目录。
备注
可能需要管理权限才能创建此文件夹。
在“UpdateConsentDialog”目录中,创建一个名为“en”的子目录。
备注
为每个区域设置创建一个新目录。 例如,可以为 fr 和 de 区域设置添加子目录。 如有必要,这些目录将包含法语和德语字符串和语言包。
步骤 2:创建 product.xml 清单文件
创建一个名为“product.xml”的文本文件。
在 product.xml 文件中,添加以下 XML 代码。 确保不会覆盖现有的 XML 代码。
<Product xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper" ProductCode="Microsoft.Sample.EULA"> <!-- Defines the list of files to be copied on build. --> <PackageFiles CopyAllPackageFiles="false"> <PackageFile Name="ConsentDialog.exe"/> </PackageFiles> <!-- Defines how to run the Setup package.--> <Commands > <Command PackageFile = "ConsentDialog.exe" Arguments=''> <ExitCodes> <ExitCode Value="0" Result="Success" /> <ExitCode Value="-1" Result="Fail" String="AU_Unaccepted" /> <DefaultExitCode Result="Fail" FormatMessageFromSystem="true" String="GeneralFailure" /> </ExitCodes> </Command> </Commands> </Product>
将该文件保存到 UpdateConsentDialog 引导程序目录。
步骤 3:创建 package.xml 清单文件和软件许可条款
创建一个名为“package.xml”的文本文件。
在 package.xml 文件中,添加以下 XML 代码以定义区域设置并包括软件许可条款。 确保不会覆盖现有的 XML 代码。
<Package xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper" Name="DisplayName" Culture="Culture" LicenseAgreement="eula.rtf"> <PackageFiles> <PackageFile Name="eula.rtf"/> </PackageFiles> <!-- Defines a localizable string table for error messages. --> <Strings> <String Name="DisplayName">Update Consent Dialog</String> <String Name="Culture">en</String> <String Name="AU_Unaccepted">The automatic update agreement is not accepted.</String> <String Name="GeneralFailure">A failure occurred attempting to launch the setup.</String> </Strings> </Package>
将该文件保存到 UpdateConsentDialog 引导程序目录中的 en 子目录中。
为软件许可条款创建一个名为”eula.rtf”的文档。
备注
软件许可条款应包括有关许可、担保、责任和本地法律的信息。 这些文件应该是特定于区域设置的,因此请确保以支持 MBCS 或 UNICODE 字符的格式保存文件。 向法律部门咨询软件许可条款的内容。
将该文档保存到 UpdateConsentDialog 引导程序目录中的 en 子目录中。
如有必要,请为每个区域设置的软件许可条款创建一个新的 package.xml 清单文件和一个新的 eula.rtf 文档。 例如,如果为 fr 和 de 区域设置创建了子目录,请创建单独的 package.xml 清单文件和软件许可条款,并将它们保存到 fr 和 de 子目录中。
将更新同意应用程序设置为必备组件
在 Visual Studio 中,你可以将更新同意应用程序设置为必备组件。
将更新同意应用程序设置为必备组件
在“解决方案资源管理器”中,单击要部署的应用程序的名称。
在“项目”菜单上,单击“ProjectName”> 属性。
单击“发布”页,然后单击“必备组件” 。
选择“更新同意对话框”。
注意
可能需要关闭并重新打开 Visual Studio,才能在“必备组件”对话框中看到“更新同意对话框”。
单击 “确定” 。
创建和测试安装程序
将更新同意应用程序设置为必备项后,就可以为应用程序生成安装程序和引导程序了。
在不单击“我同意”的情况下创建和测试安装程序
在“解决方案资源管理器”中,单击要部署的应用程序的名称。
在“项目”菜单上,单击“ProjectName”> 属性。
单击“发布”页,然后单击“立即发布” 。
如果“发布输出”未自动打开,请导航到“发布输出”。
运行 Setup.exe 程序。
安装程序显示“更新同意对话框”软件许可协议。
阅读软件许可协议,然后单击“接受”。
“更新同意对话框”应用程序随即显示,并显示以下文本:要安装的应用程序会在 Web 上检查最新更新。 单击“我同意”即可授权应用程序自动从 Internet 检查更新。
关闭应用程序或单击“取消”。
应用程序显示错误:安装 ApplicationName 的系统组件时出错。 在成功安装完所有系统组件之前,安装程序无法继续。
单击“详细信息”可显示以下错误消息:组件“更新同意对话框”安装失败,错误消息如下:“不接受自动更新协议”。以下组件安装失败:- 更新同意对话框
单击“关闭”。
在单击“我同意”的情况下创建和测试安装程序
在“解决方案资源管理器”中,单击要部署的应用程序的名称。
在“项目”菜单上,单击“ProjectName”> 属性。
单击“发布”页,然后单击“立即发布” 。
如果“发布输出”未自动打开,请导航到“发布输出”。
运行 Setup.exe 程序。
安装程序显示“更新同意对话框”软件许可协议。
阅读软件许可协议,然后单击“接受”。
“更新同意对话框”应用程序随即显示,并显示以下文本:要安装的应用程序会在 Web 上检查最新更新。 单击“我同意”即可授权应用程序自动从 Internet 检查更新。
单击“我同意”,然后单击“继续”。
应用程序开始安装。
如果显示“应用程序安装”对话框,请单击“安装”。