将 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
在“开始”菜单中单独显示。
它们也显示在应用列表中。