Seite 1 von 1
feststellen, ob Registry-Zweig existiert
Verfasst: 21.09.2010 10:10
von texti
Hallo Ihr da draussen,
entschuldigt bitte, dass zum 1000. mal die Frage nach der Registry kommt, aber ich bin jetzt seit 2 Tagen auf der Suche nach einer Möglichkeit dafür und habe nichts passendes für mich gefunden (oder habe den Code vielleicht nicht richtig anpassen können -> PureBasic Anfänger). Ich möchte ein kleines Programm schreiben, das feststellt, ob in der Registry unter HKEY_CLASSES_ROOT der Zweig "Word.Application" existiert. Dabei ist es egal, welche Werte darin stehen, da ich nur Abfragen möchte, ob Word istalliert ist. Später soll das Ganze dann auf Excel ("Excel.Application") und Outlook ("Outlook.Application") erweiterbar sein. Die Ergebnisse sollen in einer Textdatei ("text.txt") , etwa im Format:
word=1
excel=1
outlook=0
gespeichert werden, wobei 1=vorhanden und 0=nicht vorhanden ist.
Kann mir da jemand weiterhelfen? Wäre auch für jede andere Möglichkeit, mit der ich abfragen kann, ob Word, Excel etc. installiert ist, dankbar.
Vorab schonmal vielen Dank für Eure Mühe
Re: feststellen, ob Registry-Zweig existiert
Verfasst: 21.09.2010 10:57
von Kiffi
texti hat geschrieben:Wäre auch für jede andere Möglichkeit, mit der ich abfragen kann, ob Word, Excel etc. installiert ist, dankbar.
das kannst Du beispielsweise mit
COMate bewerkstelligen:
Code: Alles auswählen
IncludePath #PB_Compiler_Home + "srod\comateplus\" ; Pfad anpassen
XIncludeFile "COMatePLUS.pbi"
Procedure TestApplication(Application.s)
Protected oApplication.COMateObject
oApplication = COMate_CreateObject(Application)
If oApplication
Debug Application + " ist installiert"
oApplication\Invoke("Quit")
oApplication\Release()
Else
Debug Application + " ist nicht installiert"
EndIf
EndProcedure
TestApplication("Outlook.Application")
TestApplication("Word.Application")
TestApplication("Excel.Application")
Grüße ... Kiffi
Re: feststellen, ob Registry-Zweig existiert
Verfasst: 21.09.2010 11:44
von texti
Vielen, vielen, vielen ... Dank kiffi,
so einfach, so genial und genau das, was ich gesucht habe! Und dann auch noch so eine schnelle Antwort! Hier mein angepaßter Code (vielleicht gibt es ja Leute, die sowas auch mal brauchen):
Code: Alles auswählen
IncludePath #PB_Compiler_Home + "srod\comateplus\" ; Pfad anpassen
XIncludeFile "COMatePLUS.pbi"
Procedure TestApplication(Application.s)
Protected oApplication.COMateObject
oApplication = COMate_CreateObject(Application)
If oApplication
WriteStringN(1,"1=" + Application,#PB_Ascii)
oApplication\Invoke("Quit")
oApplication\Release()
Else
WriteStringN(1,"0=" + Application,#PB_Ascii)
EndIf
EndProcedure
If CreateFile(1, "c:\kontor\programme.ini") ; wenn die Datei geöffnet werden konnte, setzen wir fort...
TestApplication("Access.Application")
TestApplication("Word.Application")
TestApplication("Excel.Application")
TestApplication("Outlook.Application")
CloseFile(1) ; schließen der zuvor geöffneten Datei
Else
MessageRequester("FEHLER","Bitte benachrichtigen Sie den Administrator!")
EndIf
Danke und Gruß
Re: feststellen, ob Registry-Zweig existiert
Verfasst: 21.09.2010 11:50
von Kiffi
texti hat geschrieben:Code: Alles auswählen
If CreateFile(1, "c:\kontor\programme.ini") ; wenn die Datei geöffnet werden konnte, setzen wir fort...
schau Dir diesbezüglich mal das
Preference-Kapitel in der PB-Hilfe an. Könnte vielleicht was für Dich sein.
Grüße ... Kiffi
P.S.: Bitte beim nächsten Code-Posting auch die entsprechenden Tags verwenden. ->
Re: feststellen, ob Registry-Zweig existiert
Verfasst: 21.09.2010 11:56
von texti
Danke für den Tip. Mache mich gleich dran und werde mich auch wegen dem code /code bessern

Re: feststellen, ob Registry-Zweig existiert
Verfasst: 21.09.2010 13:11
von Falko
texti hat geschrieben:Danke für den Tip. Mache mich gleich dran und werde mich auch wegen dem code /code bessern

Ich hab mal die Code-Tags hinzugefügt.
Gruß Falko
Re: feststellen, ob Registry-Zweig existiert
Verfasst: 21.09.2010 15:50
von texti
Nach einigem Ausprobieren haben sich noch Fragen ergeben. Jedes mal, wenn Outlook abgefragt wird und Outlook geöffnet ist, wird es bei der Abfrage geschlossen. Bei Word und Excel passiert das nicht. Hat jemand eine Idee, wie das zu beheben ist? Ausprobiert habe ich es mit Windows 7 und Office 2003. Wenn ich in nem virtuellen Computer (Win XP Pro) nur die Access 2010 Runtime installiert habe, wird bei der Access-Abfrage nicht vorhanden ausgegeben. Der Registry-Zweig "Access.Application" ist aber vorhanden (was wird bei comateplus eigentlich genau ausgelesen?). Gibt es dafür vielleicht so eine schöne einfache Lösung?
Danke und Gruß
Re: feststellen, ob Registry-Zweig existiert
Verfasst: 21.09.2010 16:48
von Kiffi
texti hat geschrieben:Jedes mal, wenn Outlook abgefragt wird und Outlook geöffnet ist, wird es bei der Abfrage geschlossen. Bei Word und Excel passiert das nicht.
das liegt daran, dass sowohl von Word und Excel je eine neue Instanz gestartet
und danach beendet wird. Outlook lässt sich nur in einer Instanz starten.
versuch das mal:
Code: Alles auswählen
IncludePath #PB_Compiler_Home + "srod\comateplus\" ; Pfad anpassen
XIncludeFile "COMatePLUS.pbi"
Procedure TestApplication(Application.s)
Protected oApplication.COMateObject
oApplication = COMate_GetObject("", Application)
If oApplication
Debug Application + " ist installiert"
oApplication\Release()
Else
oApplication = COMate_CreateObject(Application)
If oApplication
Debug Application + " ist installiert"
oApplication\Invoke("Quit")
oApplication\Release()
Else
Debug Application + " ist nicht installiert"
EndIf
EndIf
EndProcedure
TestApplication("Outlook.Application")
TestApplication("Word.Application")
TestApplication("Excel.Application")
Zu dieser Access 2010 Runtime kann ich nix sagen. Kenne ich nicht. Wenn allerdings
nur eine Runtime installiert ist (also nicht die Applikation als solche), dann wäre die
Ausgabe korrekt.
Grüße ... Kiffi
Re: feststellen, ob Registry-Zweig existiert
Verfasst: 22.09.2010 08:33
von texti
Danke Kiffi, jetzt wird Outlook nicht mehr geschlossen. Wie im Quellcode von COMatePllus zu sehen ist, bist Du an dem Projekt beteiligt. Was wird da genau abgefragt und was kann man damit noch so schönes machen? Ich soll ein kleines Installionsprogramm für eine Access-Datenbank für etwa 30 Benutzer schreiben. Diese 30 Benutzer haben ganz unterschiedliche Windows- und Programmversionen. Deshalb muß vorher abgefragt werden, welche Programme installiert sind. Wenn Access nicht vorhanden ist, muß minimal die Access Runtime 2010 (ist Lizenz- und Kostenfrei bei Microsoft runterzuladen) installiert werden. Deshalb wäre es schön, wenn die Runtime auch abgefragt werden könnte, da sie ja vielleicht doch schon installiert ist. Wie schon geschrieben, der Registry-Zweig "Access.Application" existiert auch bei der Runtime und wie es aussieht, wird sie bei der Abfrage auch kurz geöffnet und wieder geschlossen.
Danke und Gruß