AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Office 2010 - Click-To-Run - Installation erkennen

Office 2010 - Click-To-Run - Installation erkennen

Ein Thema von Angel4585 · begonnen am 25. Jan 2013 · letzter Beitrag vom 8. Feb 2014
Antwort Antwort
Seite 1 von 2  1 2   
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#1

Office 2010 - Click-To-Run - Installation erkennen

  Alt 25. Jan 2013, 10:52
Guten Tag!

Ich habe das Problem, dass ich erkennen muss ob Office (bzw. Word und Excel) installiert sind.
Seit Office 2010 gibt es die sogenannten Click-To-Run Installatinen, bei denen die Software Ihre Registry-Einträge in eine virtuelle Registry legt.

Wie kann ich auf diese zugreifen um zu erkennen, ob die Software installiert ist oder nicht?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Office 2010 - Click-To-Run - Installation erkennen

  Alt 25. Jan 2013, 11:44
Das scheint tatsächlich nicht so einfach zu sein. Auf die Schnelle konnte ich nur diese beiden Beiträge finden:
http://answers.microsoft.com/en-us/o...6-1cc1de79d2e2
http://msdn.microsoft.com/en-us/libr...ffice.14).aspx
Nicht sonderlich befriedigend, vielleicht hilft es Dir trotzdem weiter.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#3

AW: Office 2010 - Click-To-Run - Installation erkennen

  Alt 25. Jan 2013, 12:17
Ich würde die Sache etwas anderst angehen. Ich würde eher überpüfen, ob die Virtualisierung installiert ist und nicht die virtualen Registry-Keys abprüfen, da die sicherlich verschwinden, wenn ich Word, Excel oder Powerpoint wieder beende.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Office 2010 - Click-To-Run - Installation erkennen

  Alt 25. Jan 2013, 13:16
Wie verhält sich diese ClickToRun-Installation bezüglich Automatisierung (sprich ansprechen der COM-Schnittstelle)?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#5

AW: Office 2010 - Click-To-Run - Installation erkennen

  Alt 25. Jan 2013, 14:10
Mit COM kenn ich mich nicht aus, aber da die Klassen ja irgendwie über die Registry registriert werden, kann ich mir gut vorstellen, dass das dann nicht so ganz funktioniert

Hab leider kein Office mit dem ich das testen könnte.
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#6

AW: Office 2010 - Click-To-Run - Installation erkennen

  Alt 25. Jan 2013, 14:15
Vielleicht funktioniert ja der Link noch.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
379 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Office 2010 - Click-To-Run - Installation erkennen

  Alt 8. Feb 2014, 09:30
Hallo,

ich löse das so:
Delphi-Quellcode:
function WordVersion: Double;
begin
  Result := 0.0;
  with TRegistry.Create do
  begin
    try
      if (KeyExists('Software\Microsoft') = True) then
      begin
        OpenKeyReadOnly('Software\Microsoft');
        if (KeyExists('Word\7.0') = True) then // Office 95
              Result := 7.0
      else
        if (KeyExists('Office') = True) then
        begin
          OpenKeyReadOnly('Office');
          if (KeyExists('8.0\Word') = True) then // Office 97
             Result := 8.0
          else
             if (KeyExists('9.0\Word') = True) then // Office 2001
               Result := 9.0
          else
             if (KeyExists('10.0\Word') = True) then // Office XP
               Result := 10.0
          else
             if (KeyExists('11.0\Word') = True) then // Office 2003
               Result := 11.0
          else
             if (KeyExists('12.0\Word') = True) then // Office 2007
               Result := 12.0
          else
             if (KeyExists('14.0\Word') = True) then // Office 2011
               Result := 14.0
          else
             if (KeyExists('15.0\Word') = True) then // Office 2013
               Result := 15.0;
        end;
      end
    finally
           Free;
      end;
  end;
end;
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Office 2010 - Click-To-Run - Installation erkennen

  Alt 8. Feb 2014, 10:45
Warum das?
if (KeyExists('Software\Microsoft') = True) then Mal in Worten gefasst
Code:
Wenn die Bedingung wahr ist nicht falsch ist dann
Ein einfaches
if KeyExists('Software\Microsoft') then reicht völlig aus, ist besser zu lesen und liefert auch zuverlässig die richtige Reaktion, denn
Delphi-Quellcode:
const // definiert in Delphi
  False := 0;
  True := 1;
Aber bei if wird der then dann aufgerufen, wenn die Bedingung nicht falsch (<> false => <> 0 ) ist.
Dadurch funktioniert das auch, wenn eine Funktion als Boolean etwas anderes als 1 zurückliefert (beliebt ist auch -1). Deine Abfrage würde jetzt aber scheitern, denn du prüfst ja ganz gezielt auf 1 ab.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#9

AW: Office 2010 - Click-To-Run - Installation erkennen

  Alt 8. Feb 2014, 11:47
Die Funktion WordVersion liefert aber nicht zuverlässig die Version. Auf einem 64Bit Betriebssystem und ein Office 2010 64Bit wird nicht erkannt, außer ich kompiliere es als 64Bit Anwendung.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.016 Beiträge
 
Delphi 12 Athens
 
#10

AW: Office 2010 - Click-To-Run - Installation erkennen

  Alt 8. Feb 2014, 12:18
Pssst, ab dem ersten Else, bis zum Finally, gehört alles irgendwie bissl nach Rechts, denn dieses Else gehört zu dem, was man jetzt denken könnte.
(aber über Formatierung kann man ja bekanntlich streiten)
Single würde ja auch schon reichen, bei den kleinen Werten, wobei hier sogar ein Integer passen würde, da es ja (aktuell) keine Nachkommastellen gibt, wobei sich ein Integer aber "sicherer" vergleichen lässt.

Und OpenKeyReadOnly hat einen Rückgabewert, in dem das KeyExists schon eingebaut ist.




Die Funktion WordVersion liefert aber nicht zuverlässig die Version. Auf einem 64Bit Betriebssystem und ein Office 2010 64Bit wird nicht erkannt, außer ich kompiliere es als 64Bit Anwendung.
Gab es da nicht einen Befehl, welcher diese Umleitung deaktiviert?

Ansonsten fängt man ja an:
- 32 Bit-Windows mit 32 Bit-Word
- 64 Bit-Windows mit 64 Bit-Word
- 64 Bit-Windows mit 32 Bit-Word





Delphi-Quellcode:
// Wenn ich dein Muster der Formatierung konsequennt versucht weiterzuverfolgen, dann lande ich hier.
function WordVersion: Integer;
begin
  Result := 0;
  with TRegistry.Create do
    try
      if OpenKeyReadOnly('Software\Microsoft') then
        if KeyExists('Word\7.0') then // Office 95
          Result := 7
        else
          if OpenKeyReadOnly('Office') then
            if KeyExists('8.0\Word') then // Office 97
              Result := 8
            else
              if KeyExists('9.0\Word') then // Office 2001
                Result := 9
            else
              if KeyExists('10.0\Word') then // Office XP
                Result := 10
            else
              if KeyExists('11.0\Word') then // Office 2003
                Result := 11
            else
              if KeyExists('12.0\Word') then // Office 2007
                Result := 12
            else
              if KeyExists('14.0\Word') then // Office 2011
                Result := 14
            else
              if KeyExists('15.0\Word') then // Office 2013
                Result := 15;
    finally
      Free;
    end;
end;


// Oder man zieht alle IFs auf die selbe Ebene, welche als ELSE-IF zusammenhängen.
function WordVersion: Integer;
begin
  Result := 0;
  with TRegistry.Create do
    try
      if OpenKeyReadOnly('Software\Microsoft') then
        if KeyExists('Word\7.0') then // Office 95
          Result := 7
        else
        if OpenKeyReadOnly('Office') then
          if KeyExists('8.0\Word') then // Office 97
            Result := 8
          else
          if KeyExists('9.0\Word') then // Office 2001
            Result := 9
          else
          if KeyExists('10.0\Word') then // Office XP
            Result := 10
          else
          if KeyExists('11.0\Word') then // Office 2003
            Result := 11
          else
          if KeyExists('12.0\Word') then // Office 2007
            Result := 12
          else
          if KeyExists('14.0\Word') then // Office 2011
            Result := 14
          else
          if KeyExists('15.0\Word') then // Office 2013
            Result := 15;
    finally
      Free;
    end;
end;


// Wenn man die nun auch wieder entsprechend dem ELSE aufteilt und das ELSE-IF nicht zusammenhängend sieht, dann sieht das schnell so aus.
// Denn so, wie im Beispiel 1 (welches deiner Vorlage entsprach), würden sonst die ELSE vom IF scheinbar eine Ebene wegrutschen.
function WordVersion: Integer;
begin
  Result := 0;
  with TRegistry.Create do
    try
      if OpenKeyReadOnly('Software\Microsoft') then
        if KeyExists('Word\7.0') then // Office 95
          Result := 7
        else
          if OpenKeyReadOnly('Office') then
            if KeyExists('8.0\Word') then // Office 97
              Result := 8
            else
              if KeyExists('9.0\Word') then // Office 2001
                Result := 9
              else
                if KeyExists('10.0\Word') then // Office XP
                  Result := 10
                else
                  if KeyExists('11.0\Word') then // Office 2003
                    Result := 11
                  else
                    if KeyExists('12.0\Word') then // Office 2007
                      Result := 12
                    else
                      if KeyExists('14.0\Word') then // Office 2011
                        Result := 14
                      else
                        if KeyExists('15.0\Word') then // Office 2013
                          Result := 15;
    finally
      Free;
    end;
end;


// Während ich die ELSE-IF dann doch lieber auch zusammenhänge. Quasi so, als gäbe es auch im Delphi einen zusammenhängenden Elseif-Befehl.
// Denn dann kann man die Einrückung wieder problemlos konsequennt durchziehen.
function WordVersion: Integer;
begin
  Result := 0;
  with TRegistry.Create do
    try
      if OpenKeyReadOnly('Software\Microsoft') then
        if KeyExists('Word\7.0') then // Office 95
          Result := 7
        else if OpenKeyReadOnly('Office') then
          if KeyExists('8.0\Word') then // Office 97
            Result := 8
          else if KeyExists('9.0\Word') then // Office 2001
            Result := 9
          else if KeyExists('10.0\Word') then // Office XP
            Result := 10
          else if KeyExists('11.0\Word') then // Office 2003
            Result := 11
          else if KeyExists('12.0\Word') then // Office 2007
            Result := 12
          else if KeyExists('14.0\Word') then // Office 2011
            Result := 14
          else if KeyExists('15.0\Word') then // Office 2013
            Result := 15;
    finally
      Free;
    end;
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 8. Feb 2014 um 12:21 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz