我讨厌回答我自己的问题,但对于下一个要面对这个挑战的人,我确实找到了一个更简单的方法来通过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;
}
正是我所需要的,感谢分享...... – Moshisho