我正在使用 .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");
}
}
如何解决此拒绝访问错误?
谢谢。