Добрый день,Олицетворение чередующихся между успехом и провалом каждого запуска
Я написал программу для Windows Service, чтобы позволить себе проверить, если некоторые службы работают на удаленном компьютере. Программа запускается каждую минуту, а затем она запрашивает меня, когда статус службы изменился.
Я использовал этот код, чтобы сделать олицетворение Войти
public class Network
{
public class SoddingNetworkAuth : IDisposable
{
[DllImport("advapi32.dll", SetLastError = true)]
private static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken);
[DllImport("kernel32", SetLastError = true)]
private static extern bool CloseHandle(IntPtr hObject);
private IntPtr userHandle = IntPtr.Zero;
private WindowsImpersonationContext impersonationContext;
public SoddingNetworkAuth(string user, string domain, string password)
{
if (!string.IsNullOrEmpty(user))
{
// Call LogonUser to get a token for the user
bool loggedOn = LogonUser(user, domain, password,
9 /*(int)LogonType.LOGON32_LOGON_NEW_CREDENTIALS*/,
3 /*(int)LogonProvider.LOGON32_PROVIDER_WINNT50*/,
out userHandle);
if (!loggedOn)
throw new Win32Exception(Marshal.GetLastWin32Error());
// Begin impersonating the user
impersonationContext = WindowsIdentity.Impersonate(userHandle);
}
}
public void Dispose()
{
if (userHandle != IntPtr.Zero)
CloseHandle(userHandle);
if (impersonationContext != null)
impersonationContext.Undo();
}
}
}
И тогда я использую результаты от этого соответственно.
Проблема, с которой я сталкиваюсь, заключается в том, что при каждом втором запуске олицетворяется сбой. Так что если у меня было 5 прогонов результаты будут выглядеть следующим образом:
result:Running result:Cannot open Service Control Manager on computer [Computer Name] result:Running result:Cannot open Service Control Manager on computer [Computer Name] result:Running.
Я использую логин домена учетной записи службы (который может быть изменен в случае логин, необходимый для изменения), чтобы войти в машину, которая имеет права доступа к диспетчеру управления сервисом.
using (new Impersonation.Network.SoddingNetworkAuth(userName, domain, configuration.password))
{
var serviceController = new ServiceController(configuration.serviceName, configuration.IPaddress);
if (serviceController.Status == ServiceControllerStatus.Running)
{
isRunning = true;
}
}
Любые идеи относительно того, почему он не срабатывает при каждом втором запуске?
Возможный дубликат [олицетворения текущего пользователя с помощью WindowsImpersonationContext для доступа к сетевому диску] (HTTP://stackoverflow.com/questions/3891260/impersonation-the-current-user-using-windowsimpersonationcontext-to-access-netwo) – MethodMan
Является ли это программой, которая работает в течение всего дня или запускает новый экземпляр каждую минуту? Не могли бы вы добавить код, в котором вы создаете соединение SoddingNetworkAuth с диспетчером управления сервисами? – user1793963
Это сервис Windows, который запускает его каждую минуту. –