如果无法使用 Visual Studio 部署 ClickOnce 应用程序,或者需要使用高级部署功能(如受信任的应用程序部署),则应使用 Mage.exe
命令行工具创建 ClickOnce 清单。 本演练介绍如何使用命令行版本(Mage.exe)或清单生成和编辑工具的图形版本(MageUI.exe)创建 ClickOnce 部署。
注释
在 ClickOnce for .NET Core 3.1 和 .NET 5 或更高版本中,使用 dotnet-mage.exe 而不是 Mage.exe。 有关详细信息,请参阅 ClickOnce for .NET。
先决条件
本演练有一些先决条件和选项,需要在构建部署之前进行选择。
安装
Mage.exe
MageUI.exe。Mage.exe
并且MageUI.exe
是 Windows 软件开发工具包(SDK)的一部分。 必须安装 Windows SDK 或 Visual Studio 随附的 Windows SDK 版本。提供要部署的应用程序。
本演练假定你有一个已准备好部署的 Windows 应用程序。 此应用程序称为 AppToDeploy。
确定部署的分布方式。
分发选项包括:Web、文件共享或 CD。 有关详细信息,请参阅 ClickOnce 安全性和部署。
确定应用程序是否需要提升的信任级别。
如果您的应用程序需要完全信任(例如,完全访问用户的系统),可以使用
-TrustLevel
Mage.exe
选项来设置这一点。 如果要为应用程序定义自定义权限集,可以从另一个清单复制 Internet 或 Intranet 权限部分,对其进行修改以满足需求,并使用文本编辑器或 MageUI.exe将其添加到应用程序清单。 有关详细信息,请参阅 受信任的应用程序部署概述。获取验证码证书。
应使用 Authenticode 证书对部署进行签名。 可以使用 Visual Studio、
MageUI.exe
或MakeCert.exe
工具Pvk2Pfx.exe
生成测试证书,也可以从证书颁发机构(CA)获取证书。 如果选择使用受信任的应用程序部署,还必须对所有客户端计算机执行证书的一次性安装。 有关详细信息,请参阅 受信任的应用程序部署概述。注释
您还可以使用可以从证书颁发机构获取的 CNG 证书对部署进行签名。
确保应用程序没有带有 UAC 信息的清单。
需要确定应用程序是否包含包含用户帐户控制(UAC)信息的清单,例如
<dependentAssembly>
元素。 若要检查应用程序清单,可以使用 Windows Sysinternals Sigcheck 实用工具。如果应用程序包含包含 UAC 详细信息的清单,则必须在没有 UAC 信息的情况下重新生成它。 对于 Visual Studio 中的 C# 项目,请打开项目属性并选择“应用程序”选项卡。 在清单 下拉列表中,选择“ 创建应用程序而不带清单”。 对于 Visual Studio 中的 Visual Basic 项目,打开项目属性,选择“应用程序”选项卡,然后单击“查看 UAC 设置”。 在打开的清单文件中,删除单个
<asmv1:assembly>
元素中的所有元素。确定应用程序是否需要客户端计算机上的先决条件。
从 Visual Studio 部署的 ClickOnce 应用程序可以包括一个先决条件安装引导程序(setup.exe)。 本操作指南将创建 ClickOnce 部署所需的两个清单。 可以使用 GenerateBootstrapper 任务创建先决条件引导程序。
使用 Mage.exe 命令行工具部署应用程序
创建一个目录,用于存储 ClickOnce 部署文件。
在刚刚创建的部署目录中,创建版本子目录。 如果这是首次部署应用程序,请命名版本子目录 1.0.0.0。
注释
部署的版本可以不同于应用程序的版本。
将所有应用程序文件复制到版本子目录,包括可执行文件、程序集、资源和数据文件。 如有必要,可以创建包含其他文件的附加子目录。
打开 Windows SDK 或 Visual Studio 命令提示符并更改为版本子目录。
使用调用 Mage.exe创建应用程序清单。 以下语句为编译为在 Intel x86 处理器上运行的代码创建应用程序清单。
mage -New Application -Processor x86 -ToFile AppToDeploy.exe.manifest -name "My App" -Version 1.0.0.0 -FromDirectory .
注释
请务必在选项后面
-FromDirectory
包含点(.),该选项指示当前目录。 如果不包含圆点,则必须指定应用程序文件路径。使用 Authenticode 证书对应用程序清单进行签名。 将
mycert.pfx
替换为您的证书文件路径。 将 passwd 替换为证书文件的密码。mage -Sign AppToDeploy.exe.manifest -CertFile mycert.pfx -Password passwd
从 .NET Framework 4.6.2 SDK 开始,该 SDK 随 Visual Studio 和 Windows SDK 一起分发,
mage.exe
使用 CNG 和 Authenticode 证书对清单进行签名。 使用与验证码证书相同的命令行参数。切换到部署目录的根目录。
调用
Mage.exe
生成部署清单。 默认情况下,Mage.exe
会将 ClickOnce 部署标记为已安装的应用程序,以便它可以联机和脱机运行。 若要使应用程序仅在用户处于联机状态时才可用,请使用-Install
值为的选项false
。 如果使用默认值,并且用户将从网站或文件共享安装应用程序,请确保选项的值-ProviderUrl
指向 Web 服务器或共享上的应用程序清单的位置。mage -New Deployment -Processor x86 -Install true -Publisher "My Co." -ProviderUrl "\\myServer\myShare\AppToDeploy.application" -AppManifest 1.0.0.0\AppToDeploy.exe.manifest -ToFile AppToDeploy.application
使用 Authenticode 或 CNG 证书对部署清单进行签名。
mage -Sign AppToDeploy.application -CertFile mycert.pfx -Password passwd
将部署目录中的所有文件复制到部署目标或媒体。 这可能是网站或 FTP 站点、文件共享或 CD-ROM 上的文件夹。
为用户提供安装应用程序所需的 URL、UNC 或物理媒体。 如果提供 URL 或 UNC,则必须为用户提供部署清单的完整路径。 例如,如果将 AppToDeploy 部署到
http://webserver01/
AppToDeploy 目录中,则完整的 URL 路径将为http://webserver01/AppToDeploy/AppToDeploy.application
。
使用 MageUI.exe 图形工具部署应用程序
创建一个目录,用于存储 ClickOnce 部署文件。
在刚刚创建的部署目录中,创建版本子目录。 如果这是首次部署应用程序,请命名版本子目录 1.0.0.0。
注释
部署的版本可能与应用程序的版本不同。
将所有应用程序文件复制到版本子目录,包括可执行文件、程序集、资源和数据文件。 如有必要,可以创建包含其他文件的附加子目录。
启动
MageUI.exe
图形工具。MageUI.exe
通过从菜单中选择 “文件”、“ 新建”和 “应用程序清单”创建新的应用程序清单 。
在“默认 名称 ”选项卡上,键入此部署的名称和版本号。 此外,指定应用程序生成的 处理器 ,例如 x86。
选择“文件”选项卡,然后选择应用程序目录文本框旁边的省略号(...)按钮。 此时会显示 “浏览文件夹 ”对话框。
选择包含应用程序文件的版本子目录,然后选择“ 确定”。
如果您将从 Internet Information Services (IIS) 进行部署,请选中“当填充时,将 .deploy 扩展名添加到任何没有该扩展名的文件”的复选框。
转到“ 填充 ”按钮,将所有应用程序文件添加到文件列表。 如果应用程序包含多个可执行文件,请从“文件类型”下拉列表中选择入口点,将此部署的主可执行文件标记为启动应用程序。 (如果应用程序仅包含一个可执行文件,
MageUI.exe
将为你标记该文件。选择“ 所需权限 ”选项卡,然后选择需要应用程序断言的信任级别。 默认值为 FullTrust,适用于大多数应用程序。
从菜单中选择 “文件”, “另存为 ”。 此时会显示“签名选项”对话框,提示你对应用程序清单进行签名。
如果证书作为文件存储在文件系统上,请使用“ 带证书文件签名 ”选项,并使用省略号(...)按钮从文件系统中选择证书。 然后键入证书密码。
-或-
如果证书保存在可从计算机访问的证书存储中,请选择 “使用存储的证书 ”选项,然后从提供的列表中选择证书。
选择 “确定” 以对应用程序清单进行签名。 此时会显示“ 另存为 ”对话框。
在“ 另存为 ”对话框中,指定版本目录,然后选择“ 保存”。
从菜单中选择 “文件”、“ 新建”和 “部署清单 ”以创建部署清单。
在“ 名称 ”选项卡上,为此部署指定名称和版本号(本示例中为 1.0.0.0 )。 此外,指定应用程序生成的 处理器 ,例如 x86。
选择“说明”选项卡,并为发布者和产品指定值。 (当 应用程序在客户端计算机上安装以供脱机使用时,产品是在 Windows 开始菜单上为应用程序提供的名称。
选择 “部署选项 ”选项卡,然后在“ 开始位置” 文本框中指定 Web 服务器或共享上应用程序清单的位置。 例如 ,\\myServer\myShare\AppToDeploy.application。
如果在上一步中添加
.deploy
了该扩展名,请在此处选择 “使用 .deploy 文件扩展名 ”。选择“ 更新选项 ”选项卡,并指定希望此应用程序更新的频率。 如果应用程序用UpdateCheckInfo自身检查更新,请取消选中此应用程序应该检查更新复选框。
选择 “应用程序引用 ”选项卡,然后转到 “选择清单 ”按钮。 此时会显示一个打开的对话框。
选择之前创建的应用程序清单,然后选择“ 打开”。
从菜单中选择 “文件”, “另存为 ”。 此时会显示“ 签名选项 ”对话框,提示你对部署清单进行签名。
如果证书作为文件存储在文件系统上,请使用“ 带证书文件签名 ”选项,并使用省略号(...)按钮从文件系统中选择证书。 然后键入证书密码。
-或-
如果证书保存在可从计算机访问的证书存储中,请选择 “使用存储的证书 ”选项,然后从提供的列表中选择证书。
转到 “确定” 以对部署清单进行签名。 此时会显示“ 另存为 ”对话框。
在“ 另存为 ”对话框中,将一个目录移动到部署的根目录,然后选择“ 保存”。
将部署目录中的所有文件复制到部署目标或媒体。 这可能是网站或 FTP 站点、文件共享或 CD-ROM 上的文件夹。
为用户提供安装应用程序所需的 URL、UNC 或物理媒体。 如果提供 URL 或 UNC,则必须向用户提供部署清单的完整路径。 例如,如果将 AppToDeploy 部署到
http://webserver01/
AppToDeploy 目录中,则完整的 URL 路径将为http://webserver01/AppToDeploy/AppToDeploy.application
。
后续步骤
需要部署新版本的应用程序时,请创建一个名为新版本的新目录(例如 1.0.0.1),并将新应用程序文件复制到新目录中。 接下来,需要执行前面的步骤来创建和签名新的应用程序清单,并更新并签署部署清单。 请注意在Mage.exe
、-New
和 -Update
调用中指定相同的更高版本,因为 ClickOnce 仅更新更高版本,其中最左侧的整数最为重要。 如果您使用了 MageUI.exe,可以通过打开部署清单,选择 应用程序引用 选项卡,点击 选择清单 按钮,然后选择更新后的应用程序清单来更新部署清单。