.NET - 获取在另一个域中的计算机上运行的进程
我正在寻找一种方法,从.NET代码获取正在运行的进程在不同域上的远程计算机上的列表。.NET - 获取在另一个域中的计算机上运行的进程
我有机器的用户名和密码。但是,System.Diagnostics.Process.GetProcesses()函数只有两个覆盖。其中一个接受远程机器的名称,但没有办法将用户名和密码发送到该机器。为了使该工具正常工作,它必须是您已有权访问的域中的计算机。
我不是100%确定这是否可以完成,但我怀疑它可以通过Interop和WMI完成。
如果很重要,.NET应用程序将运行在Windows 7监控计算机上,该计算机需要连接到我们的某个零售位置的Windows XP计算机。
我试过搜索以前的问题,并在发布此问题之前尝试过Google。如果有重复的问题,请让我知道,我会删除这个问题。
我讨厌回答我自己的问题,但对于下一个要面对这个挑战的人,我确实找到了一个更简单的方法来通过System.Management对象执行此操作。
在codeproject.com上有一个完整的工作应用程序和源代码。
http://www.codeproject.com/KB/cs/Remote_process_controller.aspx
我修改了它颇有几分我specfic目的,并获得尽可能小的功能可按做到这一点。我分享给下一个来的人。
请注意,您需要添加对项目的参考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;
}
您正在寻找的是实现等效于runas /networkonly
的地方,本地计算机上的进程标识保持不变,而任何出站网络访问均使用指定的凭据完成。
根据SO帖子How to build RUNAS /NETONLY functionality into a (C#/.NET/WinForms) program?您需要使用CreateProcessWithLogonW
和LOGON_NETCREDENTIALS_ONLY
。
正是我所需要的,感谢分享...... – Moshisho