將 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
在「開始」功能表中單獨顯示。
它們也顯示在應用清單中。