将 ClickOnce 配置为在同一环境中安装来自同一项目的多个已发布的程序(仅限 .NET 框架版本)

更新页 :
页面创建日期 :

操作确认环境

Visual Studio
  • Visual Studio 2022
.NET Framework
  • .NET Framework 4.8

操作要求环境

框架
  • Windows Forms (.NET Framework) 全般
  • WPF (.NET Framework) 全般

入门

此提示介绍如何在同一环境中单独安装来自同一项目的多个 ClickOnce。

关于从同一项目以不同配置发布多个项目的步骤

例如,如果同一项目通过生成配置更改了操作,则可能需要将其发布为单独的程序。 这可以在 .NET(核心)版本中完成,但在 .NET 框架版本中,Visual 工作室的标准功能是不可能的。

此方法使用批处理程序合并到以下提示中: 此提示假定您:

在 ClickOnce 中作为单独的应用程序安装的条件

如果使用前面的批处理程序发布,则生成配置会更改,但两者都被视为相同的应用程序。 尝试在同一环境中安装两个将发生冲突,并且以后尝试安装的内容将失败。

您需要将其识别为单独的应用程序,但根据引用的文章,以下参数似乎标识了应用程序。

参考: (.NET) 在 ClickOnce 上发布后启动应用时,您会因为“部署 ID 与订阅不匹配”而生气。

  • 应用程序名称
  • 公钥令牌
  • 文化
  • 处理器体系结构(如 x86)

在这种情况下,“区域性”和“处理器体系结构”可能会产生意外的处理结果,因此不宜更改它们。

我认为有一种方法可以更改“应用程序名称”, 基本上,我很少推荐它,因为只有一个项目可以命名它。 根据生成配置和条件参数,可以在项目文件的内容中定义多个。 由于只能将一个 UI 设置为视觉工作室,因此根据操作,可能会覆盖它,因此有点危险。

其余的是公钥令牌,但您可以创建多个证书。 这一次,我想识别应用程序,因为它可以指定为 ClickOnce 发布时的参数。

操作确认步骤

从创建项目到准备发布批处理文件,与以下提示相同,因此请参考这些步骤。

创建证书

这一次,我们将检查示例的测试证书。 它最初应该使用合法证书,但不包括与证书相关的说明,因为需要执行与主题不同的步骤,如创建证书或准备证书颁发机构。 在生产中,只需将测试证书文件替换为生产文件即可。

创建项目并创建批处理以进行发布后,返回到 Visual 工作室。 打开项目属性,然后从左侧菜单中选择“签名”。 检查“对 ClickOnce 清单进行签名”复选框。

现在创建两个证书。 这一次,我将在此屏幕上创建“。 pfx“ 文件格式的证书可以用其他方式创建。

单击右下角的“创建测试证书”按钮。

您可以输入密码,但即使不输入密码,它也会移动。 但是,如果输入密码,则步骤会很麻烦,因此这次不会输入密码。

为项目生成了证书 (.pfx) 文件。 此处生成的文件名是固定的,但您可以稍后更改它。 顺便说一下,您在此处创建的测试证书的有效期为一年。 一年后,您需要重新创建新证书。

使用相同的过程创建另一个。

这一次,我们将发布调试和发布生成,因此让我们将其重命名为易于理解的名称。

修复批处理

在文本编辑器中打开已创建的批处理文件(.bat),并将以下内容添加到 msbuild 参数:

参数名称 说明 必填
ManifestKeyFile 证书的文件名 (.pfx)。 指定相对于项目文件的路径或绝对路径。
ManifestCertificateThumbprint 清单证书的指纹。 要输入的值并不重要,但必须始终输入。
ProductName 产品名称。 成为“开始”菜单和程序列表的显示名称。
PublisherName 公共公司名称。 成为在“开始”菜单中组织程序时的文件夹名称。

基于上述情况,修补程序文件将按如下方式修改:

ClickOnceDebug发行.bat (例)

call "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat"
cd %~dp0
msbuild ClickOnceBuildConfiguration.sln /t:Publish /t:CopyPublishedApplication /p:Configuration=Debug /p:PublishUrl="publish\Debug\\" /p:InstallUrl="\\xxxxServer\publish_Debug\\" /p:ManifestKeyFile="ClickOnceMultipleInstallDebug.pfx" /p:ManifestCertificateThumbprint="Debug" /p:ProductName="CliclOnce テスト Debug システム" /p:PublisherName="Sorceryforce"

ClickOnceRelease发行.bat (例)

call "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat"
cd %~dp0
msbuild ClickOnceBuildConfiguration.sln /t:Publish /t:CopyPublishedApplication /p:Configuration=Release /p:PublishUrl="publish\Release\\" /p:InstallUrl="\\xxxxServer\publish_Release\\" /p:ManifestKeyFile="ClickOnceMultipleInstallRelease.pfx" /p:ManifestCertificateThumbprint="Release" /p:ProductName="CliclOnce テスト Release システム" /p:PublisherName="Sorceryforce"

ManifestKeyFile 每个值指定单独的证书文件。 ManifestCertificateThumbprint 值并不重要,但请确保输入此值,因为应用程序无法将其标识为其他值。

顺便说一下,这一次,我们在同一环境中安装了两个程序,因此我们添加了参数,以便 ProductName 区分它们。 PublisherName 是你最喜欢的。

发布

完成后,运行并发布每个批处理文件。

由于已发布的文件具有 xxx.应用程序,因此请在文本编辑器中打开它,publicKeyToken 并确保 每个值都不同。

安装

将已发布的文件复制到发布文件夹后 setup.exe ,运行 并安装 。

如果在颁发时输入证书,则安装时将显示以下屏幕。 安装测试证书,因为它无法验证发布者。

第一个程序已安装并启动。

请尝试安装另一个。

另一个也安装和启动。

当然,两者同时移动。

ProductName 在“开始”菜单中单独显示。

它们也显示在应用列表中。