Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wie kann ich Informationen vom Betriebssystem abfragen?
ChrisProg
myCSharp.de - Member

Avatar #avatar-3533.jpg


Dabei seit:
Beiträge: 174
Herkunft: Cloppenburg

Themenstarter:

Wie kann ich Informationen vom Betriebssystem abfragen?

beantworten | zitieren | melden

Hallo zusammen,

Ich verzweifle an folgendem (exemplarisch):


try
{
      string version_Os = String.Empty;
     // Get the OS information.
     string os_query = "SELECT * FROM Win32_OperatingSystem";

     ManagementObjectSearcher os_searcher = new ManagementObjectSearcher(os_query);
     foreach (ManagementObject info in os_searcher.Get())
     {
         version_Os = info.Properties["Version"].Value.ToString();
     }
}
catch (System.Threading.ThreadAbortException ex) { }
catch (System.Management.ManagementException ex) { }
catch (Exception ex) { }
Ich erhalte jedesmal einen Fehler mit leerer Message(siehe Anhang...)


Wenn ich durch den Code stepe, sehe ich, das er für "ManagementObject info in os_searcher.Get()" recht lange (einige Sekunden) braucht...

Versuche ich dann auf "os_searcher.Get().Count" zuzugreifen, erhalte ich folgenden Fehler:
Fehler
'os_searcher.Get().Count' löste eine Ausnahme des Typs 'System.Runtime.InteropServices.COMException' aus


Die Entwicklungsumgebung wird als Admin gestartet und auch der angemeldete User ist Admin ..
Das BS ist Win10 Pro



Bin für jede Hilfe dankbar ...


MfG Christian
Attachments
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.393

beantworten | zitieren | melden

Was ist denn Dein Ziel?

Die OS Version bekommst Du Systemübergreifend über Environment.OSVersion
Auf .NET Core funktioniert der Namespace soweit ich weiß erst ab 3.0.
private Nachricht | Beiträge des Benutzers
ChrisProg
myCSharp.de - Member

Avatar #avatar-3533.jpg


Dabei seit:
Beiträge: 174
Herkunft: Cloppenburg

Themenstarter:

beantworten | zitieren | melden

Mein Ziel ist es Informationen vom System zu bekommen...

Ich habe "SELECT * FROM Win32_OperatingSystem" exemplarisch genommen, um andere Fehler auszuschließen ...

Ursprünglich will ich folgendes ermitteln:
"Select * From Win32_Process Where ProcessID = " + processId ( wobei die ProcessId schon vorher ermittelt wird...)

Es ist leider ganz gleich, welchen der vielen Befehle und Möglichkeiten ich nehme, ich scheitere immer am searcher.Get().Count der nie "0" ist, sondern immer einen Fehler schmeißt ...

MfG Christian
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von ChrisProg am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.393

beantworten | zitieren | melden

Und Du bist auf was?
.NET Core 2? 3? .NET Framework? Windows...?

ManagementObject hat sehr große Einschränkungen.
zB können Windows Einstellungen und Group Policies die Verwendung von WMI beeinflussen.
private Nachricht | Beiträge des Benutzers
ChrisProg
myCSharp.de - Member

Avatar #avatar-3533.jpg


Dabei seit:
Beiträge: 174
Herkunft: Cloppenburg

Themenstarter:

beantworten | zitieren | melden

Sorry ..

.NET 4.6.1 auf Windows 10

MfG Christian
private Nachricht | Beiträge des Benutzers
ChrisProg
myCSharp.de - Member

Avatar #avatar-3533.jpg


Dabei seit:
Beiträge: 174
Herkunft: Cloppenburg

Themenstarter:

beantworten | zitieren | melden

Zitat von Abt
Und Du bist auf was?
.NET Core 2? 3? .NET Framework? Windows...?

ManagementObject hat sehr große Einschränkungen.
zB können Windows Einstellungen und Group Policies die Verwendung von WMI beeinflussen.

kannst Du das eventuell näher ausführen ?

MfG Christian
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.393

beantworten | zitieren | melden

Bin kein OS Profi; weiß aber, dass WMI sehr fragil ist und am besten vermieden werden sollte, wenn möglich.
Ich weiß auch, dass WMI zickig ist, was Berechtigungen und das System betrifft - und, dass der empfohlene Weg nicht WMI ist :-)

Wenn Du also andere Möglichkeiten als WMI hast, um an Deine Infos zu kommen: nutze sie.
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.643

beantworten | zitieren | melden

Funktionieren denn andere WMI-Queries (s. z.B. Win32 Classes)?

Du könntest auch mal das bei Windows enthaltene WBEMTest (s. WBEMTest - Part 2: WMI queries) oder WMI Explorer ausprobieren, ob generell WMI Abfragen auf dem Rechner funktionieren.
private Nachricht | Beiträge des Benutzers
ChrisProg
myCSharp.de - Member

Avatar #avatar-3533.jpg


Dabei seit:
Beiträge: 174
Herkunft: Cloppenburg

Themenstarter:

beantworten | zitieren | melden

@Th69:

ja mit WBETest u. WMI Explorer bekomme ich Daten ...


MfG Christian
Attachments
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.643

beantworten | zitieren | melden

Dann müßtest du wohl mal in den .NET-Code hineindebuggen (ist schon etwas länger her, daß ich das mal gemacht habe - evtl. hilft: How to: Debug .NET Framework source oder Configure Visual Studio 2013 for debugging .NET framework [hoffentlich noch aktuell?])
private Nachricht | Beiträge des Benutzers
hummigbird1
myCSharp.de - Member

Avatar #avatar-3534.jpg


Dabei seit:
Beiträge: 127

beantworten | zitieren | melden

Könnte auch am "Scope" deiner Abfrage liegen.
Bin mir nicht sicher was der Defaultscope des Management searcher objects ist.
Am besten mal in der Doku schauen.

Aber du mußt beim WBETest meines Wissens nach auch einen Scope angeben (so etwas in der Art wie: root\CIMV2)

Dementsprechend mußt du auch sicherstellen das dein Searcher auch diesen Scope benutzt.
Es gibt einen entsprechenden Konstruktor
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.643

beantworten | zitieren | melden

Das dachte ich auch erst, aber "root\CIMV2" sollte der Default-Namespace beim Konstruktor (ohne Angabe dessen) sein - aber einen Versuch ist das natürlich wert.
Mittels ManagementPath DefaultPath läßt sich dieser auch auslesen (bzw. setzen).
Und so läßt sich der Pfad nachträglich ermitteln:


string namespacePath = managementObjectSearcher.Scope.Path.NamespacePath;
private Nachricht | Beiträge des Benutzers
ChrisProg
myCSharp.de - Member

Avatar #avatar-3533.jpg


Dabei seit:
Beiträge: 174
Herkunft: Cloppenburg

Themenstarter:

beantworten | zitieren | melden

Leider habe ich wieder keine Benachrichtigungen bekommen, deshalb die verspätete Antwort


Danke für die Antworten, werde mir das mal zu Gemüte führen...


MfG Christian
private Nachricht | Beiträge des Benutzers