簡體   English   中英

如何在Windows服務的鎖定/解鎖會話處理程序中使用WtsApi32.dll?

[英]how to use WtsApi32.dll in lock/Unlock session handler in windows service?

我想使用Windows服務檢測並關閉任何程序(例如:Notepad.exe)。 下面的代碼是在控制台應用程序中的不錯選擇。

class Program
{
    private static SessionSwitchEventHandler sseh;
    static void Main(string[] args)
    {
        sseh = new SessionSwitchEventHandler(SystemEvents_SessionSwitch);
        SystemEvents.SessionSwitch += sseh;
        while (true) { }
    }

    static void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
    {
        Console.WriteLine(e.Reason.ToString());
    }
}

但以上代碼在Windows Service Windows 7中不起作用。請看此鏈接:

http://social.msdn.microsoft.com/Forums/eu/netfxcompact/thread/04b16fac-043a-41c3-add9-482c912e95be

我已經在無法在win 7上運行的Windows服務中編寫了以下代碼,每次在控制台應用程序中的Windows 7上都可以正常工作。

protected override void OnStart(string[] args)
{ 
    SystemEvents.SessionSwitch += SystemEvents_SessionSwitch;
    Console.ReadLine();
    SystemEvents.SessionSwitch -= SystemEvents_SessionSwitch;
}


static void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
{
    WriteToLogFile( e.Reason.ToString());
    if (e.Reason == SessionSwitchReason.SessionLock)
    {
         WriteToLogFile("SessionLock ");
    }
    if (e.Reason == SessionSwitchReason.SessionUnlock)
    {
         WriteToLogFile("SessionUnlock ");
    }
    if (e.Reason == SessionSwitchReason.SessionLogon)
    {
         WriteToLogFile("SessionLogon ");
    }
}

我已經閱讀了這篇文章( http://rhauert.wordpress.com/category/ucc/ ),但是我不能使用

protected override void OnStart(string[] args)
{
     WriteToText("Windows Service is started");
     SessionChangeHandler x = new SessionChangeHandler();
}

MSDN:

SystemEvents.SessionSwitch事件

僅在消息泵正在運行時才引發此事件。 在Windows服務中,除非使用隱藏表單或手動啟動消息泵,否則不會引發此事件。 有關顯示如何通過使用Windows服務中的隱藏表單處理系統事件的代碼示例,請參見SystemEvents類。

此頁面上的代碼示例,還指出:

服務沒有消息循環,除非允許它們與桌面交互。 如果此隱藏示例未提供消息循環,則該服務必須在本地系統帳戶下運行,並且需要手動干預才能與桌面進行交互。 即,管理員必須手動選中服務屬性對話框的“登錄”選項卡上的“允許服務與桌面交互”復選框。 在這種情況下,將自動提供消息循環。 僅當服務在本地系統帳戶下運行時,此選項才可用。 無法通過編程方式啟用與桌面的交互。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM