將 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 在「開始」功能表中單獨顯示。

它們也顯示在應用清單中。