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. ->

Code: Alles auswählen

 ...DeinCode... [/code ]

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 :D

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 :D
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ß