Autor Beitrag
ASMFreak
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53
Erhaltene Danke: 9



BeitragVerfasst: So 13.01.13 14:27 
Hallo,

kennt sich jemand mit der WMI (Windows Management Intrumentation) aus? Ich bekomme da in bestimmten Situationen Fehler, die ich nicht verstehe und über die ich im Netz nichts finden kann.
Ich nutze folgenden Code, um Informationen zu bestimmten WMI-Klassen zu bekommen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure Test(WMIClass: String);  
var
    ManObj: ManagementObject;
    S: String;
begin
    try
      for ManObj in ManagementObjectSearcher.Create(System.String.Format('SELECT * FROM {0}', WMIClass)).Get do
      S := ManObj['Caption'].ToString;
    except
      S := Exception(ExceptObject).ToString;
    end;
end;

Das steht in Übereinstimmung mit vielen Stellen im Netz, die das so oder leicht abgewandelt auch tun. Das funktioniert auch ganz gut, zumindest wenn man z.B. der Prozedur die WMI-Klasse "Win32_Process" übergibt. Iteriert man oben, erhält man auf diese Weise die Namen aller aktuell laufenden Prozesse. Übergibt man "Win32_LogicalDisk", erhält man erwartungsgemäß die Roots der gemounteten Laufwerke. Soweit, so gut.
Am Code scheint es also nicht zu liegen, wenn man aber, was mich mehr interessieren würde, die Klasse "Win32_Thread" übergibt. Denn dann gibt's Probleme: In der Zeile
S := ManObj['Caption'].ToString;
tritt eine Exception mit der Meldung
Zitat:
"System.Management.ManagementException: Allgemeiner Fehler"

auf.
Das passiert auch mit anderen Klassen, z.B. "Win32_PerfRawData_PerfProc_Thread"; und selbst bei "Win32_PerfFormattedData_PerfProc_Process" und nicht nur beim Feld "Caption" werden diese Exceptions erzeugt.
Meine Suche im Netz erbrachte nicht viel Hilfreiches. Lediglich mit einem Link konnte ich feststellen, dass das offenbar ein Problem ist, das unabhängig von meinen Bemühungen besteht. Unter
www.microsoft.com/do...e&displaylang=en
gibt es von Microsoft ein Tool, mit dem man Code für solche Abfragen generieren kann. Dieses Tool ermöglicht auch das Testen des generierten Codes. Tut man das über den Button "Search For Proerty Values", zeigt sich die Meldung "Allgemeiner Fehler". Und auch wenn man "Execute Code" drückt, zeigt sich nach Öffnen einer Konsole das Meldungsfenster
Zitat:
An error occurred while quering for WMI data: Allgemeiner Fehler
.
Kennt jemand das Problem? Weiß jemand Abhilfe? Liegt das am OS (ich entwickle unter Win7) oder ist WMI defekt? Wenn ja: Was kann man tun?

Bin 'mal wieder für jeden konstruktiven Tip dankbar.
Gruß,
Trutz


Moderiert von user profile iconTh69: Topic aus Sonstiges (.NET) verschoben am So 13.01.2013 um 14:07

_________________
Und aus dem Chaos sprach eine Stimme zu mir: Lächle und sei froh, es könnte schlimmer kommen.
Und ich lächelte und ich war froh – und es kam schlimmer!
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: So 13.01.13 15:32 
Ich bin in Sachen WMI zugegebenermaßen relativ unbeleckt, aber wenn ich da mal etwas brauche, schaue ich hier nach. Unter "My Projects" gibt es außerdem noch 2 freie Tools zum Generieren von Delphi-Code bzw. -Klassen für WMI-Abfragen. Das hat jetzt wohl nicht unmittelbar mit Deinem Problem zu tun, hilft aber vielleicht trotzdem weiter.
ASMFreak Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53
Erhaltene Danke: 9



BeitragVerfasst: So 13.01.13 15:58 
Ich glaube, Du hast das schon richtig erkannt: Es geht nicht darum, Code zm Abfragen zu generieren. Das brauche ich, wie gesehen, nicht! Es geht darum, dass
  • entweder mit Win7/Vista/?? Änderungen an WMI vorgenommen wurden, die nicht (ausreichend? sichtbar?) dokumentiert wurden und daher die WMI-Klassen in zwei (oder mehr) "Unterklassen" einteilen, zu denen die eine Win32_Process et al. gehören und die abfragbar sind, und in eine, zu der Win32_Thread et al. gehören und auf die nicht (mehr) zugegriffen werden kann. Das kann durchaus möglich sein, da sich ja auch etwas an den PerformanceCountern geändert hat, nur finde ich darüber keine Information; oder
  • an meiner aktuellen WMI-Instalation etwas "kaputt" ist, und, wenn ja, was und wie man es repariert; oder
  • etwas an den Services nicht stimmt; oder
  • WasWeißDennIch ;-)

Insofern war der Link nicht wirklich hilfreich. Trotzdem vielen Dank, @WasWeißDennIch!

Gruß,
Trutz

_________________
Und aus dem Chaos sprach eine Stimme zu mir: Lächle und sei froh, es könnte schlimmer kommen.
Und ich lächelte und ich war froh – und es kam schlimmer!
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: So 13.01.13 16:43 
Lade Dir von www.magsys.co.uk/delphi/magwmi.asp das Programm MagWMI runter und führe das Testprogramm mal aus. In der unteren Box trägst Du von Hand "win32_thread" ein und klickst anschließend links daneben auf "Get class or query".

Wenn die Abfrage damit auch nicht funktioniert, dann liegt die Ursache an Deinem System. Funktioniert aber die Abfrage, dann liegt es an Deinem Code. Da bei MagWMI die Sourcen dabei sind, kannst Du nachschauen, wie es richtig gemacht werden muß.

Für diesen Beitrag haben gedankt: ASMFreak
ASMFreak Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53
Erhaltene Danke: 9



BeitragVerfasst: So 13.01.13 17:12 
@Gerd

Danke für den Link! Ich habe das Tool downgeloaded und das Testprogramm gestartet. In der Combo fehlen genau die Klassen, die bei mir Probleme machen, u.a. Win32_Thread. Das würde erklären, warum bei mir die Exceptions auftreten. Wenn ich Dich richtig verstehe, liegt das Problem also an meinem System. Daher habe ich die Quellen zunächst nicht durchforstet. Denn in aller Bescheidenheit: Ich glaube nicht, dass es am Code liegt. So habe ich im Netz eine Stelle gefunden, die exakt mit dieser Code-Sequenz die Klasse Win32_Thread abfragt. (Ich habe den Link aber aus genau diesem Grund nicht mehr, müsste mich also erneut durchs Netz googlen.)

Das wirft für mich aber zwei Fragen auf:
  1. Wie werde ich das Problem los? Kann man WMI "nachinstallieren", ohne den Rechner neu aufsetzen zu müssen?
  2. Warum hat dann die Process-Klasse in .Net keine Probleme? Denn die dürfte ja auch die WMI-Klassen abfragen. Und wenn ich einen Prozess via Process-Klasse starte, liefert die mir auch Angaben zum Thread ...

Danke für die Hilfe.
Gruß,
Trutz

p.s. Wenn ich Win32-Thred von Hand eintrage, gibt's besagte Fehlermeldung "Allgemeiner Fehler"!

pp.s. Ich habe die Quelle 'mal kurz überflogen. Das Tool verwendet offenbar nicht das .Net-Framework sondern die Win32-API zur Abfrage. Das unterstützt die Vermutung, dass es ein Systemfehler ist, lässt mich aber immer mehr stutzen, warum sich das bislang noch nicht in anderen Anwendungen ausgewirkt hat. Wie auch immer: Die Frage bleibt - Wie kann ich reparieren ohne alles neu aufzusetzen?

_________________
Und aus dem Chaos sprach eine Stimme zu mir: Lächle und sei froh, es könnte schlimmer kommen.
Und ich lächelte und ich war froh – und es kam schlimmer!
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: So 13.01.13 19:16 
user profile iconASMFreak hat folgendes geschrieben Zum zitierten Posting springen:
Kann man WMI "nachinstallieren", ohne den Rechner neu aufsetzen zu müssen?

Es gibt von Microsoft ein WMI-Diagnosetool: technet.microsoft.co...ibrary/ff404265.aspx

Der Link zum Programm ("Microsoft Download Center") steht im ersten Satz. Nach der Beschreibung sollte das Programm alles überprüfen und bei Problemen die entsprechenden Lösungsmöglichkeiten aufzeigen.
ASMFreak Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53
Erhaltene Danke: 9



BeitragVerfasst: Mo 14.01.13 11:40 
Das Tool hatte ich bereits versucht, aber die Masse an Fehlermeldungen (189 allein hinsichtlich fehlender Klasse und 49 hinsichtlich fehlender Rechte) und die Aussicht, jede manuell behandeln zu müssen, hatte mich hoffen lassen, es gäbe einen automatischeren Weg ...
Inzwischen habe ich versucht, tatsächlich den Vorschlägen aus diesem Tool zu folgen - mit keinem Erfolg. Zwar scheinen die einzelnen Maßnahmen immer erfolgreich abzulaufen - ein erneuter Lauf von WMIDiag liefert aber dann die bekannten Resultate. Merkwürdig ist auch, dass die als fehlend genannten Dateien in Wahrheit existieren. Und so bringt auch das Neucompilieren der MOF-Dateien nichts. Alles in allem viel manuelle Arbeit um nichts!
Es wird also darauf hinauslaufen müssen, das System neu aufzusetzen - oder auf WMI zu verzichten.

Gruß,
Trutz

_________________
Und aus dem Chaos sprach eine Stimme zu mir: Lächle und sei froh, es könnte schlimmer kommen.
Und ich lächelte und ich war froh – und es kam schlimmer!
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Mo 14.01.13 11:54 
user profile iconASMFreak hat folgendes geschrieben Zum zitierten Posting springen:
Es wird also darauf hinauslaufen müssen, das System neu aufzusetzen - oder auf WMI zu verzichten.

Hast Du nach den Änderungen und dem Starten von wmidiag.vbs mal Deinen Rechner neu gestartet?
Außerdem würde ich Dir empfehlen zu überprüfen, ob Du Dir auf dem PC etwas eingefangen hast.
Auch ein Blick auf die Dienste würde sich lohnen. Sind vielleicht einige deaktiviert?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 14.01.13 12:25 
Oder hast du vielleicht Systemzerstörer wie gewisse "Tuning"-Tools oder so installiert?
ASMFreak Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53
Erhaltene Danke: 9



BeitragVerfasst: Mo 14.01.13 18:39 
Nee, getuned wird bei mir nicht!
Inzwischen bin ich um einige Kaffees und Erfahrungen reicher! Es war tatsächlich das System. Nachdem die in WMIDiag angegebenen manuellen Lösungsvorschläge nichts gebracht haben habe ich eskalierend folgende Versuche durchgeführt:
  • Reparaturinstallation mit Original-CD in der Hoffnung, um eine Neuinstallation herumzukommen; Ergebnis: Eine Fehlermeldung mit dem freundlichen Hinweis, dass eine auomatische Reparatur nicht möglich sei. Genauere Angaben wer, wo, was und warum: Fehlanzeige.
  • Deinstallation von SP1 und erneutes Windows-Update; dieser Tip findet sich an manchen Stellen im Netz. Ergebnis: Problem bestand weiter.
  • Dann fiel mir aus vergangenen XP-Tagen ein irgendwo aufgeschnappter und im Hirn gebliebener Tip aus dem Netz ein, dass das Installieren eines ServicPacks via Update nicht das gleiche ist wie das Installieren eines heruntergeladenen ServicePacks. Daher nochmals Deinstallation des SP1, Download vom SP1 und Installation. Und siehe da: Die Probleme sind weg!
  • Nächste Stufe wäre eine Neuinstallation gewesen, die ich mir schwer überlegt hätte!

Zwar meldet WMIDiag immer noch Fehler; nur lassen die sich auf die fehlenden Zugriffsberechtigungen zu verschiedenen Unterverzeichnissen erklären. Und manche "Default-Sicherheitseinstellungen" sind immer noch "modified" und damit Quelle zum Meckern. Aber das, worauf es mir ankam - verschiedene, gängige Win32_-Klassen abfragen zu können -, funktionert jetzt offenbar!

Daher Danke an alle, die Hirnschmalz investiert haben! Und ein guter Rat: Der Kollege aus XP-zeiten hat Recht! Manchmal wirkt eine Neuinstallation eines Servicepacks wirklich Wunder ...

Gruß,
Trutz

_________________
Und aus dem Chaos sprach eine Stimme zu mir: Lächle und sei froh, es könnte schlimmer kommen.
Und ich lächelte und ich war froh – und es kam schlimmer!