Error receiving:
An unhandled exception of type 'System.StackOverflowException' occurred in System.Management.dll
My column:
[controlled by root 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 =" ") String 228 + 0xd bytes C #
Computer_Managerment.exe! Computer_Managerment.ScanAllComputers.Workerthread () String 95 + 0x1e bytes C #
mscorlib.dll! System.Threading.ThreadHelper.ThreadStart_Context (state object) + 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
Code where I get stackoverflow:
try { gManager = new ManagementScope(ConnectStr, oConn);
Basically this code works at this stage 1) I have a list of all computers in AD (more than 1k)
2) I have 10 threads rotating in a while loop, getting the compiler from the Que list.
3) When they have a computer name, they instantiate the ComputerInformation class, which runs gManager.Connect (); this is a failure again.
His understanding is that this crash / stackoverflow is happening inside its own code, but I assume that I am doing something wrong. If you need any more code, I would like to publish it.
Pr request more code: this is the code in which the workers live (normal for about 10 people)
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(); } }
Constructor in class 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);