首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Windows 程序防關閉技術探討:從 Hook 到服務化的合規路徑

     編輯:程式設計綜合問答

需求背景

開發者詢問如何編寫一個「任務管理器關不掉」的程序。這類需求常見於工控看門狗、數字標牌播放端、考試客戶端等必須持續運行的場景。

技術手段對比

方案原理優點缺點/風險
全局 Hook (SetWindowsHookEx) 攔截 `WM_CLOSE`、`TerminateProcess` 等消息/調用 用戶態實現,無需驅動簽名 易被殺毒軟件攔截,Windows 8+ 限制較多,維護成本高
ACL 權限控制 修改進程安全描述符,拒絕 `PROCESS_TERMINATE` 訪問 原生安全機制,無侵入代碼 管理員仍可提權覆蓋,需配合 UAC 虛擬化
系統服務 以 `LocalSystem` 身份運行,配置 `SERVICE_NOT_STOPPABLE` 最高權限,任務管理器默認不顯示/無法結束 安裝需管理員,開發調試複雜,攻擊面大
雙進程守護 兩進程互相監視,一方退出即拉起 純用戶態,邏輯簡單 仍可被同時結束,體驗差,易被判定為流氓行為

合規建議

首選方案:編寫 Windows Service。使用 C# `BackgroundService` 或 C++ `CreateService`,設置恢復選項(失敗重啟),配合「啟動類型:自動」。對於桌面交互需求,採用「服務 + 前端 UI 進程」架構,服務負責核心邏輯與自啟動,UI 進程通過 IPC 與服務通信,即使 UI 被關閉,服務仍在後台運行。

代碼示例

// C# .NET 6+ Worker Service 範本
public class WatchdogService : BackgroundService {
    protected override async Task ExecuteAsync(CancellationToken stoppingToken) {
        while (!stoppingToken.IsCancellationRequested) {
            // 核心業務邏輯
            await Task.Delay(1000, stoppingToken);
        }
    }
}
// Program.cs
IHost host = Host.CreateDefaultBuilder(args)
    .UseWindowsService() // 關鍵:註冊為 Windows 服務
    .ConfigureServices(s => s.AddHostedService())
    .Build();
host.Run();

法律與道德邊界

任何防關閉技術均不應用於惡意軟件、勒索軟件或繞過用戶授權。企業級應用應通過「設備管理員/MDM 策略」或「指派訪問模式」實現合規的單應用鎖定體驗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved