Registry lesen
Götz Gottwald
- perl
Hallo!
Wie kann ich mit Perl einen Eintrag aus der WinXP Registry lesen?
Welche Module brauche ich dafür und wo kann ich die runterladen?
Vielen Dank
Götz
Hallo,
Wie kann ich mit Perl einen Eintrag aus der WinXP Registry lesen?
Welche Module brauche ich dafür und wo kann ich die runterladen?
Das sollte eigentlich mit dem Modul"Win32::Registry" klappen, und ist, zumindest bei dem Activestate-Port, mit dabei.
Grüße
Klaus
Hallo,
Wie kann ich mit Perl einen Eintrag aus der WinXP Registry lesen?
Welche Module brauche ich dafür und wo kann ich die runterladen?
Das sollte eigentlich mit dem Modul"Win32::Registry" klappen, und ist, zumindest bei dem Activestate-Port, mit dabei.
Ich habe ActivePerl installiert. Wenn ich aber das Beispielprogramm ausführe funktioniert das so nicht.
Muss man nach der Installation noch irgendwas einstellen, damit man dieses Modul benutzen kann? Ich bin in der Beziehung noch ziemlicher Anfänger!
Götz
#!/usr/bin/perl
use Win32::Registry;
my $tips;
$::HKEY_LOCAL_MACHINE->Open("SOFTWARE\Microsoft\Windows"
."\CurrentVersion\Explorer\Tips", $tips)
or die "Can't open tips: $^E";
my ($type, $value);
$tips->QueryValueEx("18", $type, $value) or die "No tip #18: $^E";
print "Here's a tip: $value\n";
hi!
Das sollte eigentlich mit dem Modul"Win32::Registry" klappen,
und ist, zumindest bei dem Activestate-Port, mit dabei.
Ich habe ActivePerl installiert. Wenn ich aber das
Beispielprogramm ausführe funktioniert das so nicht.
Bei mir funktioniert das Beispielprogramm ohne Änderung und ohne, dass
ich irgendwas eingestellt habe.
"Das funktioniert so nicht" ist auch keine besonders geglückte Problem-
Beschreibung.
bye, Frank!
Bei mir erscheint halt diese nervende Seite von Apache mit Internal Server Error.
An was kann das denn noch liegen, dass es nicht funktioniert?
Andere Scripte funktionieren ja auch. Bis jetzt habe ich allerdings auch noch nie etwas mit use gemacht.
Götz
hi!
Das sollte eigentlich mit dem Modul"Win32::Registry" klappen,
und ist, zumindest bei dem Activestate-Port, mit dabei.
Ich habe ActivePerl installiert. Wenn ich aber das
Beispielprogramm ausführe funktioniert das so nicht.
Bei mir funktioniert das Beispielprogramm ohne Änderung und ohne, dass
ich irgendwas eingestellt habe.
"Das funktioniert so nicht" ist auch keine besonders geglückte Problem-
Beschreibung.
bye, Frank!
Mit einem anderen WebServer hat es gerade auf anhieb funktioniert.
Mit Apache allerdings nicht. Woran kann das liegen?
Götz
Bei mir erscheint halt diese nervende Seite von Apache mit Internal Server Error.
An was kann das denn noch liegen, dass es nicht funktioniert?
Andere Scripte funktionieren ja auch. Bis jetzt habe ich allerdings auch noch nie etwas mit use gemacht.
Götz
hi!
Das sollte eigentlich mit dem Modul"Win32::Registry" klappen,
und ist, zumindest bei dem Activestate-Port, mit dabei.
Ich habe ActivePerl installiert. Wenn ich aber das
Beispielprogramm ausführe funktioniert das so nicht.
Bei mir funktioniert das Beispielprogramm ohne Änderung und ohne, dass
ich irgendwas eingestellt habe.
"Das funktioniert so nicht" ist auch keine besonders geglückte Problem-
Beschreibung.
bye, Frank!
Hallo, << Begrüßungen sind hier immer gern gesehen;-)
Bei mir erscheint halt diese nervende Seite von Apache mit Internal Server Error.
An was kann das denn noch liegen, dass es nicht funktioniert?
Andere Scripte funktionieren ja auch. Bis jetzt habe ich allerdings auch noch nie etwas mit use gemacht.
Das Beispiel ist nicht dafür gedacht, 1:1 im Webserverumfeld verwendet zu werden. Perl ist ein weitaus vielseitiger einzusetzendes Werkzeug, um damit nur schnöde Webseiten zusammenzustöpseln.
Wenn Du also Perl mit einem richtigen Webserver verwenden willst dann sollte zu8mindest eine Zeile wie
print "Content-type: text/html";
nicht fehlen.
Mit einem anderen WebServer hat es gerade auf anhieb funktioniert.
Was noch nichts darüber aussagt, daß das Script auch mit dem Apache funktioniert. der Apache Webserver läßt einem viele Freiheiten, allerdings fordert er auch im GEgenzug etwas mehr Verständnis für die Materie.
Mit Apache allerdings nicht. Woran kann das liegen?
Du weißt (noch) nicht, wie man Scripts in Perl für den Apache schreibt. Aber da kann dir hier sicherlich weiter geholfen werden.
Für den Anfang empfehle ich Dir erst mal das Kapitel über CGI und Perl von SelfHTML zu lesen http://selfhtml.teamone.de/cgiperl/, und zwar erst mal im ganzen Rutsch durch, um Dir einen Überblick zu verschaffen.
Grüße
Klaus
Nochmal Hallo...
Hallo, << Begrüßungen sind hier immer gern gesehen;-)
Bei mir erscheint halt diese nervende Seite von Apache mit Internal Server Error.
An was kann das denn noch liegen, dass es nicht funktioniert?
Andere Scripte funktionieren ja auch. Bis jetzt habe ich allerdings auch noch nie etwas mit use gemacht.
Ich benutze diese Zeile auch! Nur zum testen sollte aber das Script so völlig ausreichen.
Das Beispiel ist nicht dafür gedacht, 1:1 im Webserverumfeld verwendet zu werden. Perl ist ein weitaus vielseitiger einzusetzendes Werkzeug, um damit nur schnöde Webseiten zusammenzustöpseln.
Mit dem Apache läuft bei mir bisher alles. (shtml, cgi, php...)
Anscheinend ist da nur irgendwas falsch konfiguriert.
Wenn Du also Perl mit einem richtigen Webserver verwenden willst dann sollte zu8mindest eine Zeile wie
print "Content-type: text/html";
nicht fehlen.
Mit einem anderen WebServer hat es gerade auf anhieb funktioniert.
Was noch nichts darüber aussagt, daß das Script auch mit dem Apache funktioniert. der Apache Webserver läßt einem viele Freiheiten, allerdings fordert er auch im GEgenzug etwas mehr Verständnis für die Materie.
Mit Apache allerdings nicht. Woran kann das liegen?
Du weißt (noch) nicht, wie man Scripts in Perl für den Apache schreibt. Aber da kann dir hier sicherlich weiter geholfen werden.
Für den Anfang empfehle ich Dir erst mal das Kapitel über CGI und Perl von SelfHTML zu lesen http://selfhtml.teamone.de/cgiperl/, und zwar erst mal im ganzen Rutsch durch, um Dir einen Überblick zu verschaffen.
Wo ist denn der Unterschied zwischen "Apache-Perl-Dateien" und anderen? Das das Script nicht bei Unix funktioniert ist mir auch klar. Ich habe denke ich auch schon genug da gelesen. Das Problem liegt denke ich meiner Apache konfiguration.
Danke für eure Mühen
Götz
Grüße
Klaus
Hallo,
Bei mir erscheint halt diese nervende Seite von Apache mit Internal Server Error.
An was kann das denn noch liegen, dass es nicht funktioniert?
Andere Scripte funktionieren ja auch. Bis jetzt habe ich allerdings auch noch nie etwas mit use gemacht.
Nur zum testen sollte aber das Script so völlig ausreichen.
Nicht, wenn Du es mit dem Webserver verwenden willst.
Das Beispiel ist nicht dafür gedacht, 1:1 im Webserverumfeld verwendet zu werden. Perl ist ein weitaus vielseitiger einzusetzendes Werkzeug, um damit nur schnöde Webseiten zusammenzustöpseln.
Mit dem Apache läuft bei mir bisher alles. (shtml, cgi, php...)
Anscheinend ist da nur irgendwas falsch konfiguriert.
Nicht unbedingt. Wie schon gesagt, gewissen Konventionen mußt Du eben einhalten, wenn Du ein Script mit dem Webserver verwenden willst. s.u.
Wenn Du das Script per Commandline aufrufst, dann ist das was ganz anderes. (Und eigentlich ist Perl für diesen Einsatzzweck gedacht. Perl gab's schon, als HTML und HTTP noch gar nicht existierte)
Wenn Du also Perl mit einem richtigen Webserver verwenden willst dann sollte zu8mindest eine Zeile wie
print "Content-type: text/html";
nicht fehlen.
Wo ist denn der Unterschied zwischen "Apache-Perl-Dateien" und anderen? Das das Script nicht bei Unix funktioniert ist mir auch klar.
Der Apache-Webserver verlangt von jedem CGI-Programm, egal in welcher Sprache es geschrieben wurde, daß zumindest der Content-Type (also der Typ des Dokuments) und das Dokument selbst ausgegeben wird. Programme, die über die Commandshell aufgerufen werden, müssen das nicht tun.
Es kann sein, daß andere Webserver weniger Anforderungen stellen, als es beim Apache der Fall ist. Aber übel nehmen sie es dann auch nicht, wenn Du diese Ausgaben trotzdem machst.
Das alles hat nichts mit irgendeinem Betriebssystem zu tun. Daß ist ja auch der Grund, warum oft Perl für CGI-Programmierung eingesetzt wird.
Ach ja, vorhing vergaß ich vollkommen, dich auf das Allerwichtigste aufmerksam zu machen.
Was steht den eigentlich im Logfile? (Die findest Du meist unter %Installverz_von_Apache%\logs, wobei error.log das Objekt Deiner Begierde sein sollte)
Grüße
Klaus
Hallo,
Der Apache-Webserver verlangt von jedem CGI-Programm, egal in welcher Sprache es geschrieben wurde, daß zumindest der Content-Type (also der Typ des Dokuments) und das Dokument selbst ausgegeben wird.
Verd..., noch was vergessen. Die erste Zeile des Perlscripts muß natürlich
#!c:/pfad/zu/perl.exe -w
lauten, wobei Du den vollständigen Pfad zur perl.exe angeben mußt (also oft C:/perl/bin/perl.exe).
Grüße
Klaus
Jetzt hab ichs.
Es lag ganz trivial an dem Fehler, den du schon zu Anfang erwähntest.
Die Zeile print "Content-type: text/html\n\n"; hat Apache einfach gefehlt.
Vielen Danke für die ganze Mühe.
Götz
Hallo Klaus, Götz
Wie kann ich mit Perl einen Eintrag aus der WinXP Registry lesen?
Welche Module brauche ich dafür und wo kann ich die runterladen?
Das sollte eigentlich mit dem Modul"Win32::Registry" klappen, und ist, zumindest bei dem Activestate-Port, mit dabei.
Win32::TieRegistry
ist imvho bequemer und transparenter in der Anwendung (tied Hashes in Perl sind ohnehin eine Feinheit). Ist auch bei ActiveState in der Standardinstallation enthalten und sollte den Vorzug gegen Win32::Registry haben, denn dort steht ja auch:
"Win32::Registry - accessing the Windows registry [obsolete, use Win32::TieRegistry]"
Ciao
K@rl