簡體   English   中英

在windoes服務中如何使用ManagementEventWatcher?

[英]How to use ManagementEventWatcher in a windoes service?

我正在嘗試在C#.NET4 Windows服務應用程序內使用ManagementEventWatcher。 在“ OnStart”方法的某個時刻,我有以下幾行:

string scope = "\\root\\cimv2";
string query =
  "SELECT * FROM __InstanceCreationEvent " +
  "WITHIN 1 " +
  "WHERE TargetInstance ISA 'Win32_NTLogEvent' " +
  " AND ( " +
  "      targetInstance.EventCode = '4768' " + 
  "   OR targetInstance.EventCode = '4770' " + 
  "   OR targetInstance.EventCode = '672'" + 
  "   OR targetInstance.EventCode = '674'" + 
  " )";
eventListener = new ManagementEventWatcher(scope, query);
eventListener.EventArrived += new EventArrivedEventHandler(HandleEvent);


eventListener.Start();

eventListener.Start(); 行給出了“訪問被拒絕”消息的異常。 我試圖將我的服務設置為Administrator或LOCALSYSTEM,但沒有幫助。

我也找到了此文檔: http : //msdn.microsoft.com/zh-cn/library/aa392289(VS.85).aspx但是我不知道如何在C#中使用它。

如果放在WindowsForms應用程序中,則相同的代碼將按預期工作。

謝謝。

這里沒有內在的東西可以阻止服務提供此功能。 實際上,我使用了您的代碼,並在本地系統帳戶下將其作為服務(著名的開發人員遺言)在我的機器上運行良好。 如果正在運行的帳戶缺少事件日志的權限,則就您的情況而言,或它需要的其他任何內容,將被保釋。 我在解決類似問題時經常會遇到的一些一般性提示:1.請記住,您可以選擇以“運行方式”運行Windows窗體應用程序,使其在與實際登錄身份不同的帳戶下運行。 我懷疑使用管理員帳戶運行Windows窗體應用程序會像您的服務一樣完全失敗。 2.選擇性地使用安全審核對於查明訪問問題非常有幫助。 3.使用Sysinternals ProcMon通常可以查明拒絕訪問的對象。 4.要盡可能多地調試服務代碼而不使其作為服務運行,請按照此博客文章(http://jclaes.blogspot.com/2010/03/cannot-start-service- from-command-line.html)

原來這是Windows XP的問題。 代碼對此失敗,但可在Windows 2003以后的任何較新Windows版本上使用。

暫無
暫無

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

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