c# - 使用 ManagementScope (WMI) - 有什么问题吗?

标签 c# asp.net wmi

我想使用 System.Management.ManagementScope 来查询当前登录的用户列表。

这将是我们将部署给客户的更大应用程序的一部分,因此它需要易于设置且高度可靠。

ManagementScope/WMI 合适吗?在大多数操作系统上是否始终可以查询?是否有任何我必须考虑的安全问题,例如非提升用户登录到工作站,该用户是否能够查询 WMI?系统帐户会作为服务运行吗?

在走这条路之前我应该​​知道的任何其他陷阱?

谢谢

最佳答案

运行服务的系统帐户是我们处理它的方式,因为并非所有用户都是本地管理员。我们将服务与 GUI 同时推出,并通过 IPC channel 与其对话。它有效,而且比担心用户可以在 WMI 中看到哪些范围更容易。在我们的例子中,它还有助于写入事件日志。

WMI 可能是最简单的方法。您可以查看 pinvoke/Win32 API(甚至可能是终端服务器 API),但 WMI 可能是最容易启动和可靠运行的。

我在使用 WMI 时遇到的唯一问题是速度 - 尽管我通常会遇到这些关于过于宽泛的硬件查询的问题,所以我认为这可能是我的问题。

据我所知,Windows 2000 及更低版本需要与 Windows XP 及更高版本不同的查询,因为对于 XP 及更高版本,您查询 Win32_LogonSession 以获得 LogonType=2(交互式)的结果。由于 2000 及以下版本仅支持单个登录控制台用户,您只需查询 Win32_ComputerSystem 并获取返回结果的 UserName 属性即可。

关于c# - 使用 ManagementScope (WMI) - 有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4046692/

相关文章:

c# - 在单线程应用程序中调用 WMI 函数时的 DisconnectedContext MDA

asp.net - 如何仅存储 hh :mm in the datetime field?

c# - Web 项目的引用路径保存在哪里?

php - 在 Web 应用程序中查找瓶颈的方法有哪些?

c# - .Net GetProcesses 的访问被拒绝

winapi - 在 Rust 中实现 IWbemObjectSink 接口(interface)

c# - "SqlParameterCollection only accepts non-null SqlParameter type objects, not String objects"

c# - WPF UI 未由 INotifyPropertyChanged 更新

c# - 如何确定cefsharp版本

c# - 为什么在 MSDN 中记录的 FileVersionInfo.FileMinorPart (int) 可能为空?