首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

Windows 服務啟用「允許服務與桌面互動」的程式碼實作

     編輯:ASP.NET 基礎

應用場景

Windows 服務需顯示 UI 視窗、彈出訊息方塊或啟動 GUI 程式時,必須勾選「允許服務與桌面互動」。透過 WMI 在安裝認可階段自動設定。

實作程式碼 (ProjectInstaller.cs)

using System;
using System.Collections;
using System.Management;
using System.ServiceProcess;

[RunInstaller(true)]
public partial class ProjectInstaller : Installer
{
    public ProjectInstaller()
    {
        InitializeComponent();
    }

    protected override void OnCommitted(IDictionary savedState)
    {
        base.OnCommitted(savedState);
        EnableDesktopInteraction();
    }

    private void EnableDesktopInteraction()
    {
        try
        {
            var options = new ConnectionOptions { Impersonation = ImpersonationLevel.Impersonate };
            var scope = new ManagementScope(@"root\CIMV2", options);
            scope.Connect();

            // 服務名稱需與 serviceInstaller1.ServiceName 一致
            string serviceName = "MyCustomService"; 
            var service = new ManagementObject($"Win32_Service.Name='{serviceName}'");
            var inParams = service.GetMethodParameters("Change");
            inParams["DesktopInteract"] = true;
            service.InvokeMethod("Change", inParams, null);
        }
        catch (Exception ex)
        {
            // 記錄日誌,不要拋出以免安裝失敗
            System.Diagnostics.EventLog.WriteEntry("MyServiceInstaller", 
                $"啟用桌面互動失敗: {ex.Message}", EventLogEntryType.Warning);
        }
    }
}

關鍵細節

  • 服務名稱:必須與 ServiceInstaller.ServiceName 完全一致,區分大小寫。
  • 執行時機:OnCommitted 確保服務已建立於 SCM 中。
  • 權限:安裝程式需以**系統管理員**權限執行,WMI 需足夠權限。
  • Session 0 隔離:Vista/Server 2008 之後,服務運行於 Session 0,桌面互動視窗**不會顯示在使用者桌面**,僅適用於舊版 OS 或特殊需求(如啟動獨立 GUI 進程)。
  • 現代替代方案:建議採用「服務 + 獨立桌面應用程式」架構,透過 WCF/Named Pipe/TCP 通訊,服務負責背景邏輯,桌面應用負責 UI。

驗證方式

  1. 安裝服務後,開啟 `services.msc`
  2. 右鍵服務 → 內容 → 「登入」索引標籤
  3. 確認「允許服務與桌面互動」已勾選
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved