我正在寻找一种方法,从.NET代码中获取远程计算机上运行进程的列表,该计算机位于不同的域中。
我有机器的用户名和密码。但是,System.Diagnostics.Process.GetProcesses()函数只有两个覆盖。其中一个接受远程计算机的名称,但无法将用户名和密码发送到该计算机。为了使punciton工作,它必须是您已经有权访问的域中的计算机。
我不是100%确定是否可以这样做,但我怀疑它可以通过Interop和WMI完成。
如果重要,.NET应用程序正在Windows 7监视计算机上运行,该计算机需要连接到我们某个零售点的Windows XP计算机。
在发布此问题之前,我尝试搜索以前的问题并尝试了Google。如果有重复的问题,请告诉我,我将删除此问题。
答案 0 :(得分:3)
我讨厌回答我自己的问题,但是对于下一个面对这个挑战的人,我确实通过System.Management对象找到了一种更简单的方法。
在codeproject.com上有一个包含源代码的完整工作应用程序。
http://www.codeproject.com/KB/cs/Remote_process_controller.aspx
为了我的特殊目的,我修改了它,并获得了尽可能小的功能。我正在为下一个人分享它。
请注意,您需要在项目中添加对 System.Management 的引用。
private bool CheckForExpectedProcess(string userName, string password, string machineName, string logonDomain, string PartialProcessname)
{
bool ReturnValue = false;
System.Management.ManagementScope managementScope;
try
{
System.Management.ConnectionOptions connOptions = new System.Management.ConnectionOptions();
connOptions.Impersonation = System.Management.ImpersonationLevel.Impersonate;
connOptions.EnablePrivileges = true;
connOptions.Username = logonDomain + "\\" + userName;
connOptions.Password = password;
managementScope = new System.Management.ManagementScope(@"\\" + machineName + @"\ROOT\CIMV2", connOptions);
managementScope.Connect();
System.Management.ManagementObjectSearcher objSearcher = new System.Management.ManagementObjectSearcher("SELECT Name FROM Win32_Process WHERE NAME LIKE'%" + PartialProcessname + "%'");
System.Management.ManagementOperationObserver opsObserver = new System.Management.ManagementOperationObserver();
objSearcher.Scope = managementScope;
string[] sep = { "\n", "\t" };
System.Management.ManagementObjectCollection objects = objSearcher.Get();
ReturnValue = objects.Count > 0;
}
catch (Exception ex)
{
// handle error - we log it to our own system, but it's up to you.
}
return ReturnValue;
}
答案 1 :(得分:2)
您正在寻找的是实现等效于runas /networkonly
的本地计算机上的进程标识不变,而任何出站网络访问都是使用指定的凭据完成的。
根据SO帖How to build RUNAS /NETONLY functionality into a (C#/.NET/WinForms) program?,您需要将CreateProcessWithLogonW
与LOGON_NETCREDENTIALS_ONLY
一起使用。
答案 2 :(得分:1)
你可以尝试这个tool,它完全符合你的要求。您可以从任何域监视远程计算机。该工具允许监控远程机器进程,已安装的软件,设备,服务,会话等......