在 Windows 11 中為 ClickOnce (.application) 應用程式設定高優先權

Yiplok Keung 40 信譽點數
2026-04-24T12:01:44.85+00:00

我們在公司實驗室的一台 Windows 11 工作站上建立了一個時間敏感型環境,其中兩個應用程式透過虛擬串列埠進行通訊。我們遇到了一個問題:如果兩個應用程式都沒有以高優先級運行,則由於延遲,工作流程會中斷。雖然使用 cmd.exe /c start /High 命令運行標準 EXE 檔案可以正常工作,但第二個應用程式(使用 Microsoft Visual Studio 2022 建立的 .application 檔案(ClickOnce 類型))始終以普通優先權運行,沒有應用任何優先權標誌,這導致測試流程出現問題。

儘管在工作管理員中運行的進程顯示為 .exe 進程,但即使透過 .application 檔案執行,優先權設定似乎也沒有正確傳遞。是否有正確的方法可以直接以高優先級運行基於 ClickOnce 的應用程序,或者是否有變通方法可以在執行後強制設定優先級?

Windows for business | Windows Server | 裝置和部署 | 設定應用程式群組
0 則留言 沒有留言

1 個回答

排序依據: 最舊
  1. Tan Vu 2,670 信譽點數 獨立顧問
    2026-04-24T12:39:39.2866667+00:00

    你好 Keung,

    可以,但不是透過 ClickOnce 的 .application 檔本身直接指定。官方 ClickOnce 文件把 manifest 的內容放在部署、更新、相依性、權限這些項目上,沒有文件化的「process priority」設定欄位;而 Windows 的優先級是由 Process.PriorityClass 或 Win32 SetPriorityClass 來設定的。

    實務上有兩條路:

    1. 你有原始碼時,直接在應用程式啟動時設定

    這是最穩的做法,因為優先級是進程層級屬性。你可以在 Main()、OnStartup,或第一個初始化點就設成 High:

    using System.Diagnostics;
    
    Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.High;
    
    

    Process.PriorityClass 可以設定成 High、AboveNormal、Normal 等,而 SetPriorityClass 也明確是用來設定指定進程的優先級。

    1. 如果您無法編輯 ClickOnce 應用程序,請建立外部啟動器/包裝器,啟動它,然後更改實際 .exe 檔案的優先級類別。

    可以使用 Start-Process 命令啟動相關文件或程序,但其正式語法不包含 -Priority 參數;使用 -PassThru 將返回一個 Process 對象,然後您可以更改該對象的 PriorityClass。由於 ClickOnce 的啟動順序相對間接,因此通常更可靠的方法是等待實際應用程式進程啟動後再更改優先順序。

    例如,您可以使用 PowerShell 對其進行包裝(將 LabTool 替換為您的實際 EXE 檔案的名稱):

    Start-Process "C:\Path\LabTool.application"
    
    for ($i = 0; $i -lt 100; $i++) {
        $p = Get-Process -Name "LabTool" -ErrorAction SilentlyContinue | Select-Object -First 1
        if ($p) {
            $p.PriorityClass = 'High'
            break
        }
        Start-Sleep -Milliseconds 100
    }
    
    

    如果你的應用程式名稱固定,這種方式通常就夠了;如果它會再分出多個進程,讓程式自己在啟動時設定優先級會更穩。

    結論:ClickOnce 本身沒有直接的優先級設定;最佳解是改程式在啟動時設 PriorityClass,退而求其次才用外部啟動器在進程出現後強制調高。

    此回答有幫助嗎?

    0 則留言 沒有留言

您的回答

答案可由問題作者標示為「已接受」,而由仲裁者標示為「推薦」,這可協助使用者知道答案解決了作者的問題。