System.ComponentModel.Win32Exception: доступ запрещен в SuperSocket

Я работаю над приложением службы Windows на платформе.NET. Приложение работает без сбоев для одного пользователя Windows, и поначалу я не думал, что на одном компьютере может быть несколько пользователей Windows, и они могут захотеть запустить отдельные экземпляры этого приложения для своего использования. Поэтому, когда пользователь переключает свою учетную запись Windows на другую, вошедший в систему пользователь получит экземпляр службы приложений, работающий должным образом для его среды.

Так что для нескольких пользователей Windows, я хочу разрешить несколько экземпляров приложения. Но проблема в том, что правильно работает только первый экземпляр приложения. Но следующие экземпляры (созданные позже) для других пользователей Windows приводят к этой ошибке. Процессы запущены, но доступ запрещен при попытке инициализации.

System.ComponentModel.Win32Exception (0x80004005): Access is denied
   at System.Diagnostics.Process.GetProcessHandle(Int32 access, Boolean throwIfExited)
   at System.Diagnostics.Process.OpenProcessHandle(Int32 access)
   at System.Diagnostics.Process.set_EnableRaisingEvents(Boolean value)
   at SuperSocket.SocketEngine.ProcessPerformanceCounterHelper.RegisterSameNameProcesses(Process process)
   at SuperSocket.SocketEngine.ProcessPerformanceCounterHelper..ctor(Process process)
   at SuperSocket.SocketEngine.PerformanceMonitor..ctor(IRootConfig config, IEnumerable`1 appServers, IWorkItem serverManager, ILogFactory logFactory)
   at SuperSocket.SocketEngine.DefaultBootstrap.Initialize(Func`2 serverConfigResolver, ILogFactory logFactory)
   at SuperSocket.SocketEngine.DefaultBootstrap.Initialize(Func`2 serverConfigResolver)
   at SuperSocket.SocketEngine.DefaultBootstrap.Initialize()

Сценарий 01: если я выхожу из сервиса от пользователя A, а затем переключаюсь на пользователя B. Тогда служба хорошо работает в Пользователе B.

Сценарий 02: если я не выйду из сервиса от пользователя А, а затем переключусь на пользователя б. Затем процесс запускается, но служба не может быть запущена.

Сценарий-03: Если я напрямую захожу в Пользователь B, то служба запускается без проблем.

После отладки я обнаружил, что указанное выше исключение выдается в строке bootstrap.Start().

class DenticonAppServer
{
    IBootstrap bootstrap;        
    log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

    public DenticonAppServer()
    {
        log.Debug("Socket instance Created!\n");
        log4net.Config.XmlConfigurator.Configure();
    }

    private bool Initialize()
    {
        bootstrap = BootstrapFactory.CreateBootstrap();
        if (!bootstrap.Initialize())
        {
            log.Debug("Failed to initialize Bootstrap!\n");
            return false;
        }

        log.Debug("Bootstrap Initialized!\n");
        return true;
    }

    public void Start()
    {
        if (bootstrap == null)
        {
            if (Initialize() == false)
            {
                return;
            }
        }
        var result = bootstrap.Start();

        if (result == StartResult.Failed)
        {
            log.Debug("Failed to start Bootstrap!\n");
            return;
        }
        log.Debug("Bootstrap Started!\n");
    }

    public void Stop()
    {
        bootstrap.Stop();
        log.Debug("Bootstrap Stopped!\n");
    }
}

Как решить эту ошибку доступа отказано?

Заранее спасибо.

0 ответов

Другие вопросы по тегам