![]() |
Wie lese Ich Hard- und Software aus?
Hi Leute
Ich hab da nen mittelprächtiges Problem. Ich soll auf der Firma ne Datenbank programmieren in der die Rechner und Ihre hard und Softwarekonfiguration abgespeichert werden soll. Die <datenbank ist nicht das Problem. Die steht soweit. Mein Problem ist allerdings: Wie lese Ich die Hardwarekomponenten und die Software die auf den Rechnern installiert ist aus? Es darf allerdings nichts mitgeloggt werden was rückschlüsse auf die getane Arbeit der Mitarbeiter zulassen würde(vonwegen Datenschutz und so nen Krempel). Ich würd mich sehr freuen wenn einer von euch mir helfen könnte. :wall: |
Kann mir denn keiner weiterhelfen??? :firejump:
|
Also die installierte Software steht in der Registry und bedingt auch Hardware-Infos.
|
Mit der Registry is das grundsätzlich ne recht gute Idee, an die ich auch schon gedacht hatte, wobei es dabei 2 Probleme gibt:
1. Ich bin in Delphi nen ziemlicher Newbie *DUCK* und bekomme das mit der Registry nicht hin! 2. Ich muss das auf sämtlichen Betriebssystemen machen. Daraus ergeben sich dann neue Probleme: ----->>>1. Die Informationen sind in den verschiedenen Registrys (Win2000, Win 98 etc. ) unterschiedlich eingetragen ----->>>2. Wie funzt die Sache dann unter Linux/Unix/Novell oder geht das mit Delphi überhaupt nicht? |
Achja. Ich hatte da noch die Idee die Software aus der Systemsteuerung auszulesen. geht das? und wenn dann wie?
|
Das Software-Applet aus der Systemsteuerung holt es auch nur aus der Registry. Und um die Unterscheidung Win9x und den NT-basierenden System wirst du nicht drumrumkommen.
Achso unter Linux/Unix mußt du mit Kylix arbeiten und dir was anderes einfallen lassen, da es die Registry ja nicht gibt. Ich würde dafür ein gänzlich neues Programm schreiben. |
Da haste dir aber viel vorgenommen, vor allem wenn du noch ein "ziemlicher Newbie" bist.
Das Problem bei der Software ist einfach das es kein standardisiertes Konzept, wie z.B. bei einem Debian Linux gibt. Bei dem Debian Linux ist ein Programm dabei das alle installierten Pakete/Programme verwaltet/auflistet und ändern kann. Sowas fehlt bei Winodws. Die einen schreiben ihre Einstellungen in die Registry, die anderen in .ini Dateien usw.. Es gibt soweit ich weiß keinen Bereich wo jede Software dem Betriebssystem mitteilen kann: "Hallo, hier bin ich, nimm mich in deine Liste auf". Auf meinem System sind viele Programme und Spiele die in der Registry oder in irgendwelchen .ini Dateien aufgeführt sind (z.b. DScaler, Quake1-3, HL,...). Diese Programme zu erkennen wird sehr schwer. Das einzige was du machen könntest ist eine Liste von wahrscheinlich installierten Programmen zu erstellen und diese gezielt zu suchen. So sollte es zum Beispiel möglich sein, festzustellen ob ein MS Office oder AutoCad installiert ist. Jede Anwendung auf einem Rechner zu finden und zu bestimmen ist meiner Meinung nach ziemlich unmöglich, du musst dich halt auf ein paar Programme beschränken. Genau das gleiche bei der Hardware: alles zu identifizieren dürfte unmöglich sein, ein paar Sachen sollten aber ohne größeren Aufwand machbar sein (z.B. CPU/Festplatte) |
Falsche alle Windows-Programme, die sich ordentöich installieren und eien Uninstall-Routine mitbringen tragen sich im Schlüssel:
HKLM\Software\Microsoft\Windows\Currentversion\Uni nstall Dann noch unter dem gleichen Schlüssel in HKCU kucken und man sollte 9% der installierten Software haben. |
Zitat:
Ich denke mal die 9% sollten eigentlich 90% heißen, oder? |
Öhm ja, die 9% sollten 90% heißen. :mrgreen:
|
So Leute erst mal danke für eure Hilfe. ich werde den Fall mal ausprobieren.
Und zu "Da hast du dir aber was vorgenommen": Das hab ich mir nicht vorgenommen, das is mir vorgenommen worden von meinem chef! |
Na dann wollne wir mal deinen Chef glücklich machen:
Delphi-Quellcode:
Und das nächste mal sagst du ihm, die paar Zeilen kann er selber schreiben. :mrgreen:
uses Registry;
procedure TForm1.Button1Click(Sender: TObject); var reg : TRegistry; begin reg := TRegistry.Create(KEY_READ); try reg.RootKey := HKEY_LOCAL_MACHINE; if reg.OpenKey('Software\Microsoft\Windows\Currentversion\Uninstall', FALSE) then begin reg.GetKeyNames(Listbox1.Items); end else RaiselastOSError(); finally reg.Free; end; end; |
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Das Problem mit den übrig bleibenden Dateien (Konfigs, INIs, usw.) lässt sich auf die damals benutzten Installer-Versionen schieben. Die haben nur das entfernt, was sie installiert haben. Dateien, die zur Laufzeit hinzukamen, stehen nicht im Install-Log und werden daher nicht beachtet. Seitdem aber auch InstallShield und Wise zunehmend auf das MSI-Modul von Microsoft setzen, bestünde die Möglichkeit, zusätzliche Dateien zu spezifizieren, die bei der Deinstallation ebenfalls gelöscht werden. Es liegt also im Ermessen des Entwicklers bzw. Installer-Machers, wie er die Mittel nutzt. Zitat:
Zitat:
Wie ich anfangs schon andeutete: es ist die Aufgabe des Entwicklers, eine vernünftige Deinstallation zu planen. Wer sein Programm z.B. ohne Installer veröffentlicht, der sollte zumindest eine Möglichkeit anbieten, Registryschlüssel o.ä. beim Beenden des Programms löschen zu lassen. Und dass man seine INIs, DLLs, usw. nicht mehr im Windows- oder im Systemordner ablegen darf, das sollte eigentlich auch bekannt sein. Aber zurück zu einem der Themen - Zitat:
Die NonVCL-Version des Tools gibt es übrigens in den Win32-API-Tutorials. (Damit wäre die monatliche Werbung dafür auch erledigt. :wink:) |
Zitat:
|
Zitat:
Zu dem Quake 1: Ich hab das aus einer Quake Collection die unter Windows installiert wird, unter anderem ist da auch QuakeGL dabei... |
So Leute da Ihr mir so gut Geholfen habt erst noch mal ein dickes DANKE!
Aber ich hab natürlich direkt noch ne Frage. Ich hab ja oben schon geschrieben das ich auch Hardware auslesen soll. Darauf is gefallen das die teilweise in der Registry stehen. Wisst ihr zufällig auch wo da? P.S.: Chef is schon halbwegs glücklich das der Softwarekram schon mal funzt! |
Zitat:
|
Zitat:
|
hihio...
ich hab auch grad mal den Code von Luckie ausprobiert! Funktioniert super, doch spuckt er echt zu viel aus! Sowas wie : {0c82904........} wie filter ich sowas raus... weil es ja nix zum deinstallieren ist !?! Danke Trouble_Maker |
Such doch in der Listbox nach "{" in einem Eintrag und löscht ihn.
|
So mit Diesem Proggi sollte nur noch deine wirkliche Software gescannt werden:
Delphi-Quellcode:
Ich hoffe bei euch funzt es auch. Ich hatte bisher nur die Möglichkeit das unter Win98 zu Testen.
procedure TForm1.Button1Click(Sender: TObject);
var Reg: TRegIniFile; List: TStringList; I: Integer; S: String; begin Memo1.Lines.Clear; reg := TRegIniFile.Create; List := TStringList.Create; try reg.RootKey := HKEY_LOCAL_MACHINE; if reg.OpenKey('Software\Microsoft\Windows\Currentversion\Uninstall', FALSE) then begin reg.ReadSections(List); for I := 0 to List.Count - 1 do begin S := Reg.ReadString(List[I], 'DisplayName', ''); if S <> '' then Memo1.Lines.Add(S); end; end; finally List.Free; reg.Free; end; end; Wenn Ich jetzt noch die Hardware ausgelesen bekomme dann bin Ich super zufrieden und mein Chef super glücklich! |
Diese Zeile:
Delphi-Quellcode:
hatte bei mir schon einen tieferen Sinn. :roll:
reg := TRegistry.Create(KEY_READ);
Delphi-Quellcode:
Dieser Code öffnet den Schlüssel mit ALL_ACCESS also mit Lese- und Schreibrechten. Unter HKLM auf NT-basierenden Systemen hat aber nicht jeder Schreibrechte in diesem Schlüssel. Bei einem normalen Benutzer dürfte dein Code also keine Ergebnisse liefern. :?
reg := TRegistry.Create;
|
Zwei Fliegen mit einer Klatsche: So ist es!
1. Die Rechtefrage unter NT wird leider sehr oft vernachlässigt. Was passieren kann, hat Luckie ja erwähnt. Wer dazu noch das try/finally/end vergisst, wird mit einer Fehlermeldung belohnt. 2. Windows orientiert sich auch nur am Vorhandensein eines Displaynamens und zeigt nur dann ein Programm an. Ist eine schöne Methode, bestimmte Programme zu verstecken, damit man sie nicht versehentlich deinstalliert. Das war übrigens die Intention für mein Programm. :) < ------ > @Trouble_Maker: Das sind GUIDs von MSI-Installation. Aus dem Grund liest man ja auch den Displaynamen oder den "QuietDisplayname" aus, da er den Namen der Software im Klartext enthält. |
Re: Wie lese Ich Hard- und Software aus?
Und wie liest man einzelne "Dinge" (weiß et wie ichs ausdrücken soll) aus den Schlüsseln aus? :?:
Da in den Schlüsseln immer der Eintrag 'UninstallString' vorhanden ist, welcher die UnInstall-EXE beinhaltet, möchte ich diesen auch auslesen lassen. :spin: Dödel |
Re: Wie lese Ich Hard- und Software aus?
Moin Dödel,
Zitat:
Zitat:
|
Re: Wie lese Ich Hard- und Software aus?
THX. Ich sollte mir den Code VORM kopieren mal genauer anschauen *schäm*
:oops: Dödel |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz