Wie kann ich den Leistungsindikator zum Laufen bringen, ohne dass der Benutzer an einer Eingabeaufforderung mit lodctr neu erstellt?

Ich habe versucht, die gesamte CPU-Auslastung eines Windows-PCs (Windows 7 mit .NET 4.5) in C # zu ermitteln. Es sieht so aus, als würde die Verwendung von PerformanceCounter meine Anforderungen erfüllen können.

Ich habe einen Testcode geschrieben, der auf den folgenden drei Links basiert (und die MSDN-Seiten überprüft). Dies war die einfachste Version:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;

namespace EntropyProject
{
    class Program
    {
        static void Main(string[] args)
        {
            PerformanceCounter cpuCounter;

            cpuCounter = new PerformanceCounter();

            cpuCounter.CategoryName = "Processor";
            cpuCounter.CounterName = "% Processor Time";
            cpuCounter.InstanceName = "_Total";


            while(true)
            {
                try
                {
                    float firstValue = cpuCounter.NextValue();
                    System.Threading.Thread.Sleep(500);
                    Console.WriteLine("Before getting processor:");
                    float currentCpuUsage = cpuCounter.NextValue();
                    Console.WriteLine("After getting processor:");
                    System.Threading.Thread.Sleep(1000); 

                    Console.WriteLine(currentCpuUsage);
                }
                catch (Exception e)
                {
                    Console.WriteLine("\n{0}\n", e.Message);
                }
                System.Threading.Thread.Sleep(10000);

            }
        }
    }
}

Wenn NextValue aufgerufen wird, wird der folgende Ausnahmefehler ausgelöst. Dies scheint ein häufiges Problem bei einem Problem mit Leistungsindikatorwerten zu sein.

Cannot load Counter Name data, da ein ungültiger Index '' aus der Registrierung gelesen wurde

Am meisten empfohlen solutions schlagen vor, dass Sie die beschädigten Elemente mit lodctr in einem aufgerufenen Befehlsfenster als admin neu erstellen. Ich wollte die PerformanceCounters jedoch in einem Programm verwenden, das für eine große Anzahl von Personen freigegeben wird, und daher wäre es unangebracht, von ihnen zu erwarten, dass sie ihre PerformanceCounters mithilfe des Befehlsfensters neu erstellen.

Fragen

Warum tritt dieser Ausnahmefehler auf?Wie setzen Sie PerformanceCounter ansonsten richtig ein?Wie kann ich vermeiden, dass Benutzer meiner Programme ein Cmd-Fenster öffnen und ihre Leistungsindikatoren neu erstellen müssen?

Quellen:

Wie bekomme ich die CPU-Auslastung in C

Aktuelle CPU-Auslastung in @ abruf

Wie kann ich die gesamte CPU-Auslastung ermitteln?

Ähnliche Frage zum Fehler beim Zugriff auf den Zählernamen Gefragt von Annie Sheikh

Antworten auf die Frage(2)

Ihre Antwort auf die Frage