У меня есть следующий код для запуска процесса на удаленном компьютере из общего ресурса на втором удаленном компьютере, как описано на рисунке:
Соединение http://i.msdn.microsoft.com/dynimg/IC116011.png
public class Runner
{
public static string RunExecutable(string machine, string executable, string username, string password, string domain)
{
try
{
ConnectionOptions connectionOptions = new ConnectionOptions();
connectionOptions.Authority = "kerberos:" + domain + @"\" + machine;
connectionOptions.Username = username;
connectionOptions.Password = password;
connectionOptions.Impersonation = ImpersonationLevel.Delegate;
connectionOptions.Authentication = AuthenticationLevel.PacketPrivacy;
//define the WMI root name space
ManagementScope scope = new ManagementScope(@"\\" + machine + "." + domain + @"\root\CIMV2", connectionOptions);
//define path for the WMI class
ManagementPath p = new ManagementPath("Win32_Process");
//define new instance
ManagementClass classInstance = new ManagementClass(scope, p, null);
ManagementClass startupSettings = new ManagementClass("Win32_ProcessStartup");
startupSettings.Scope = scope;
startupSettings["CreateFlags"] = 16777216;
// Obtain in-parameters for the method
ManagementBaseObject inParams = classInstance.GetMethodParameters("Create");
// Add the input parameters.
inParams["CommandLine"] = executable;
inParams["ProcessStartupInformation"] = startupSettings;
// Execute the method and obtain the return values.
ManagementBaseObject outParams = classInstance.InvokeMethod("Create", inParams, null);
// List outParams
string retVal = outParams["ReturnValue"].ToString();
return "ReturnValue: " + retVal;
}
catch (ManagementException me)
{
return me.Message;
}
catch (COMException ioe)
{
return ioe.Message;
}
}
}
Iв моей среде 5 машин, все в одном домене.3 работают под управлением Windows Server 2008R2, одна Windows 7 и одна Windows XP:
- WinXP
- Win7
- Master2008
- Slave2008-1
- Slave2008-2
Я запускаю код с Master2008, контроллера домена, и пытаюсь запустить процесс на других машинах, но сталкиваюсь с некоторыми проблемами при запуске процесса на XPи 7 машин.
При запуске процесса на машинах WinXP и Win7 я получаю возвращаемое значение 8, которое равно «Неизвестная ошибка», но при запуске процесса на машинах с сервером 2008R2 это работает без проблем.
Все машины были помечены как доверенные для делегирования в AD.
Процесс, который я пытаюсь запустить, это \\ "машина \" \ c $ \ Windows \ System32 \ Calc.exe
Я попытался запустить процесс с разных машин, и результат был следующий (программа выполняется на Master2008):
On WinXP
- From Win7: Failed (8)
- From Slave2008-1: Failed (8)
- From Slave2008-2: Failed (8)
- From Master2008: Failed (8)
On Win7
- From WinXP: Success (0)
- From Slave2008-1: Failed (8)
- From Slave2008-2: Failed (8)
- From Master2008: Failed (8)
On Slave2008-1
- From WinXP: Success (0)
- From Win7: Success (0)
- From Slave2008-2: Success (0)
- From Master2008: Success (0)
On Slave2008-2
- From WinXP: Success (0)
- From Win7: Success (0)
- From Slave2008-1: Success (0)
- From Master2008: Success (0)
По какой-то причине все они терпят неудачу дляМашина WinXP, но машина Win7 может взависание с машины WinXP.
Кто-нибудь знает, что может быть не так?