- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我得到的错误:
An unhandled exception of type 'System.StackOverflowException' occurred in System.Management.dll
我的调用栈:
[Managed to Native Transition]
System.Management.dll!System.Management.ManagementScope.InitializeGuts(object o) + 0x1a3 bytes
System.Management.dll!System.Management.ManagementScope.Initialize() + 0xa3 bytes
System.Management.dll!System.Management.ManagementScope.Connect() + 0x5 bytes
Computer_Managerment.exe!Computer_Managerment.WMI.ComputerInformation.ComputerInformation(string ComputerName = "pc357", string UserName = "", string Password = "") Line 228 + 0xd bytes C#
Computer_Managerment.exe!Computer_Managerment.ScanAllComputers.Workerthread() Line 95 + 0x1e bytes C#
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart_Context(object state) + 0x66 bytes
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) + 0x6f bytes
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart() + 0x44 bytes
获取stackoverflow的代码:
try
{
gManager = new ManagementScope(ConnectStr, oConn); //\\\\" +
gManager.Connect(); // This is where the crash happens
}
catch (UnauthorizedAccessException)
{
// Code removed
}
代码基本可以在这个fasion中运行
1) 我有一个 AD 中所有计算机的列表(超过 1k)
2) 我有 10 个线程在一个 while 循环中旋转,从队列列表中获取一个计算机。
3)当他们有一个计算机名时,他们创建了一个执行 gManager.Connect(); 的 ComputerInformation 类的实例;再次崩溃。
我的理解是这个崩溃/stackoverflow 发生在 native 代码中,但我认为我做错了什么。如果需要更多代码,我很乐意发布。
Pr request more code: 这是 worker 居住的代码(一般10个 worker 左右)
internal struct stWorkList
{
public Queue<string> Work;
public List<ComputerInformation> CompInfo;
public int FailedComputers;
public int FailedPingCheck;
public int SuccessComputers;
public int TotalComputers;
public int FailedAuth;
public int FailedToContactWMIServer;
}
stWorkList gWorkList;
void Workerthread()
{
Monitor.Enter(gUserName);
Monitor.Enter(gPassword);
string UserName = gUserName;
string Password = gPassword;
Monitor.Exit(gPassword);
Monitor.Exit(gUserName);
while (true)
{
Monitor.Enter(gWorkList.Work);
if (gWorkList.Work.Count == 0)
{
Monitor.Exit(gWorkList.Work);
break;
}
string ComputerName = gWorkList.Work.Dequeue();
Monitor.Exit(gWorkList.Work);
if (ComputerName == null)
continue;
ComputerInformation iCI = new ComputerInformation(ComputerName, UserName, Password);
Monitor.Enter(gWorkList.CompInfo);
gWorkList.CompInfo.Add(iCI);
switch (iCI.Status)
{
case eComputerCheckStatus.Connected:
gWorkList.SuccessComputers++;
break;
case eComputerCheckStatus.FailedPingTest:
gWorkList.FailedPingCheck++;
gWorkList.FailedComputers++;
break;
case eComputerCheckStatus.UnauthorizedAccessException:
gWorkList.FailedComputers++;
gWorkList.FailedAuth++;
break;
case eComputerCheckStatus.FailedToContactWMIService:
gWorkList.FailedToContactWMIServer++;
gWorkList.FailedComputers++;
break;
case eComputerCheckStatus.UnkownFailed:
gWorkList.FailedComputers++;
break;
}
Monitor.Exit(gWorkList.CompInfo);
iCI.Dispose();
}
}
ComputerInformation 类中的构造函数
public ComputerInformation(string ComputerName, string UserName, string Password)
{
gComputerName = ComputerName;
gHardDriveList = new List<stHarddiskInfo>();
gProccessInfo = new List<stProccessInfo>();
gCPUInfo = new List<stCPUInformation>();
gOSInfo = new stOSInfo();
gMemoryInfo = new List<stMemoryInfo>();
gPreformanceMemory = new stPreformanceMemory();
gProccessOverView = new stProccessOverview();
gMonitorInfo = new List<stMonitorInfo>();
gNetworkInfo = new List<stNetworkInfo>();
netMon = new Ping();
PingResponse response = netMon.PingHost(ComputerName, 1);
if (response == null || response.PacketsReceived == 0)
{
gStatus = eComputerCheckStatus.FailedPingTest;
gHasError = true;
return;
}
gComputerIP = response.ServerEndPoint.Address.ToString();
ConnectionOptions oConn = new ConnectionOptions();
oConn.Timeout = new TimeSpan(0, 0, 10);
if (!string.IsNullOrEmpty(UserName) && !string.IsNullOrEmpty(UserName))
{
oConn.Username = UserName;
oConn.Password = Password;
}
string ConnectStr = "\\\\" + ComputerName + "\\root\\cimv2";
try
{
gManager = new ManagementScope(ConnectStr, oConn); //\\\\" +
gManager.Connect(); // this is where it crashes
}
catch (UnauthorizedAccessException)
{
gStatus = eComputerCheckStatus.UnauthorizedAccessException;
gHasError = true;
return;
}
catch (Exception Ex)
{
if (Ex.Message.Contains("The RPC server is unavailable"))
{
gStatus = eComputerCheckStatus.FailedToContactWMIService;
}
else
gStatus = eComputerCheckStatus.UnkownFailed;
gHasError = true;
return;
}
gStatus = eComputerCheckStatus.Connected;
try
{
GetRunningProccessInfo();
GetCPUInformation();
GetHardDriveInfo();
GetOSInfo();
GetMemoryInfo();
GetMonitorInfo();
GetComputerSystem();
}
catch
{
gStatus = eComputerCheckStatus.UnkownFailed;
gHasError = true;
}
}
最佳答案
好的开始点是检查这段代码是否抛出异常。
ManagementScope scope = new ManagementScope(@"\\localhost\root\cimv2");
scope.Connect();
更新
您在 iCI 初始化时没有 Monitor.Enter/Exit block (以及存在问题异常的地方)。
要检查这是否是您可以制作简单日志的问题。
gManager = new ManagementScope(ConnectStr, oConn);
Debug.WriteLine("connect to "+ComputerName+" by "+UserName+"/"+Password);
gManager.Connect(); // this is where it crashes
Debug.WriteLine("success on "+ComputerName+" by "+UserName+"/"+Password);
如果我的建议是正确的,您将在日志中收到如下内容:
“连接到计算机 1”
“连接到计算机 2”
并立即异常(exception)。
关于c# - Stackoverflow 调用 ManagementScope.Connect();,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1519524/
使用 caret::train() 运行逻辑回归模型时出现问题。LR = caret::train(Satisfaction ~., data= log_train, method = "glm",
我正在尝试将nginx容器作为我所有网站和Web服务的主要入口点。我设法将portainer作为容器运行,并且可以从互联网上访问它。现在,我正在尝试访问由另一个Nginx容器托管的静态网站,但这样做失
我有一个在 Windows XP SP3 x86 上运行的 Visual Studio 2008 C# .NET 3.5 应用程序。在我的应用程序中,我有一个事件处理程序 OnSendTask 可以同
我在 Eclipse 中创建了作为独立程序执行的此类,它可以毫无问题地连接所有 http URL(例如:http://stackoverflow.com),但是当我尝试连接到 https(例如 htt
我在我的 nginx 错误日志中收到大量以下错误: connect() failed (111: Connection refused) while connecting to upstream 我的
我正在尝试将新的 log4j2 与 Socket Appender 一起使用,但我有点不走运。这是我的 XML 配置文件:
我目前正在尝试寻找 Android 应用程序后端的替代方案。目前,我使用 php servlet 来查询 Mysql 数据库。数据库(Mysql)托管在我大学的计算机上,因此我无法更改任何配置,因为我
类MapperExtension有一些方法,before_insert, before_update, ...都有一个参数connection. def before_insert(self, map
嗨,我正在尝试更改位于连接库 (v 5.5) 中的文档的文档所有者,我仍在等待 IBM 的回复,但对我来说可能需要太长时间,这就是我尝试的原因逆向工程。 我尝试使用标准编辑器 POST 请求将编辑器更
我在 nginx( http://52.xx.xx.xx/ )上访问我的 IP 时遇到 502 网关错误,日志只是这样说: 2015/09/18 13:03:37 [error] 32636#0: *
我要实现 Connected-Component Labeling但我不确定我应该以 4-connected 还是 8-connected 的方式来做。我已经阅读了大约 3 种 Material ,但
我在Resources ->JMS ->Connection Factories下有两个连接工厂。 1) 连接工厂 2)集成连接工厂 我想修改两个连接工厂下连接池的最大连接数。资源 ->JMS ->连
我在将 mongoengine 合并到我的 django 应用程序时遇到问题。以下是我收到的错误: Traceback (most recent call last): File "/home/d
上下文 我正在关注 tutorial on writing a TCP server last week in Real World Haskell .一切顺利,我的最终版本可以正常工作,并且能够在
我在访问我的域时遇到了这个问题:我看到了我的默认 http500 错误 django 模板正在显示。 我有 gunicorn 设置: command = '/usr/local/bin/gunicor
我更换了电脑,并重新安装了所有版本:tomcat 8 和 6、netbeans 8、jdk 1.7、hibernate 4.3.4,但是当我运行 Web 应用程序时,出现此错误。过去使用我的旧电脑时,
您好,我是这个项目的新手,我在 CentOS7 ec2 实例上托管它时遇到问题。当我访问我的域时出现此错误: 2017/02/17 05:53:35 [error] 27#27: *20 connec
在开始之前,我已经查看了所有我能找到的类似问题,但没有找到解决我的问题的方法。 我正在运行 2 个 docker 容器,1 个用于 nginx,1 个用于 nodejs api。我正在使用 nginx
使用 debian 包将 kaa -iot 平台配置为单节点时。我收到以下错误。 himanshu@himpc:~/kaa/deb$ sudo dpkg -i kaa-node-0.10.0.deb
我是我公司开发团队的成员,担任管理员角色。我可以通过 https://developer.apple.com/ 访问团队的成员(member)中心 但是,当我尝试在 https://itunescon
我是一名优秀的程序员,十分优秀!