System.ComponentModel.Win32Exception:SuperSocket中的访问被拒绝

时间:2019-07-14 11:32:53

标签: windows windows-services supersocket.net

我正在使用 .NET 框架的Windows服务应用程序。该应用程序对于单个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::如果我没有从用户A 退出服务,然后切换到用户B 。然后,该过程开始运行,但是服务无法启动。

场景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 个答案:

没有答案