[英]Check if no user is currently logged on to Windows
我正在編寫一個Windows服務應用程序,它根據在網絡上另一台計算機上運行的不同應用程序的指示來偵聽連接並執行某些任務。
其中一項任務確保當前沒有用戶登錄,鎖定工作站,刪除一些文件,然后重新啟動系統。 我考慮使用此解決方案查看正在運行的進程列表並檢查用戶名,通過將用戶名與SYSTEM,NETWORK等進行匹配來確定是否沒有用戶登錄。我意識到我運行的PostgreSQL使用了一個名為的用戶帳戶postgres所以不行。 檢查explorer.exe是否正在運行也不起作用,因為explorer sometmes崩潰,或者我有時自己結束該進程並重新啟動它。
確定NO用戶使用C#登錄到工作站的好方法是什么?
使用WTSGetActiveConsoleSessionId()
來確定是否有人在本地登錄。 使用WTSEnumerateSessions()
來確定是否存在任何會話(包括遠程終端服務會話)。
另一種選擇,如果你不想處理P / Invokes:使用Cassia 。
using Cassia;
public static bool IsSomeoneLoggedOn(string server)
{
foreach (ITerminalServicesSession session in new TerminalServicesManager().GetSessions(server))
{
if (!string.IsNullOrEmpty(session.UserName))
{
return true;
}
}
return false;
}
您試圖檢查explorer.exe
是否正在運行。 為什么不去winlogon.exe
進程?
public bool isLoggedOn()
{
Process[] pname = Process.GetProcessesByName("winlogon");
if (pname.Length == 0)
return false;
else
return true;
}
CodeProject文章“ 使用本地安全機構枚舉.NET中的用戶會話 ”可能正是您所尋找的。 該代碼枚舉用戶並且可以識別哪些用戶(如果有的話)是交互式的(即,哪些用戶是真人)。
你可以使用WMI
select UserName from Win32_ComputerSystem
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.