Autor |
Beitrag |
Tranx
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Sa 07.09.13 09:19
Hallo,
in meinen Programmen nutze für das Versenden von E-Mail den Zugriff auf Outlook. An der Arbeit funktioniert das auch problemlos, nur zuhause habe ich einen merkwürdigen Effekt. Die Routine zum Testen, ob Outlook überhaupt installiert ist, ist anbei:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71:
| function InitOutlook: Boolean; const liVersion: integer = 0; var lsVersion: string; begin gsAktProc := 'Outlook.InitOutlook'; oleNameSpace := null; OutlookExist := False; try CoInitialize(nil); oleOutlook := NULL; if liVersion = 0 then begin liVersion := 9; while not (OutlookExist) do begin Inc(liVersion); try lsVersion := 'Outlook.Application.' + Trim(IntToStr(liVersion)); oleOutlook := CreateOLEObject(lsVersion); oleNameSpace := oleOutlook.GetNameSpace('MAPI'); OutlookExist := TRUE; except oleOutlook := NULL; OutlookExist := FALSE; end; end; end else begin try lsVersion := 'Outlook.Application.' + Trim(IntToStr(liVersion)); oleOutlook := CreateOLEObject(lsVersion); oleNameSpace := oleOutlook.GetNameSpace('MAPI'); OutlookExist := TRUE; except oleOutlook := NULL; OutlookExist := FALSE; Result := FALSE; end; end; if OutlookExist then begin try oleTaskFolder := oleNameSpace.GetDefaultFolder(olFolderTasks); <== hier tritt der Fehler auf oleCalendarFolder := oleNameSpace.GetDefaultFolder(olFolderCalendar); oleContactFolder := oleNameSpace.GetDefaultFolder(olFolderContacts); oleJournalFolder := oleNameSpace.GetDefaultFolder(olFolderJournal); oleNotesFolder := oleNameSpace.GetDefaultFolder(olFolderNotes); oleSendMailFolder := oleNameSpace.GetDefaultFolder(olFolderSentMail); oleOutboxFolder := oleNameSpace.GetDefaultFolder(olFolderOutbox); oleInBoxFolder := oleNameSpace.GetDefaultFolder(olFolderInbox); Result := TRUE; except Result := FALSE; end; end else begin Result := FALSE; end; except Fehler(EMailFehler, 1); FehlerZeile(FALSE); Result := FALSE; end; end; |
Da ich mehrere Outlookversionen im Netz habe (Outlook 2003 und Outlook 2010) habe ich einfach den Outlooktest über mehrere Versionen gemacht. Ist ja bloß die entsprechende Nummmer am Anhang von Outlook.Application.xx. Soweit - so gut. Aber zuhause bekomme ich, wenn ich Outlook NICHT gestartet habe (Windows 7 als Betriebssystem) folgenden Fehler (Bild im Anhang), ist jedoch Outlook gestartet, dann bekomme ich den Fehler nicht! Komisch, nicht.? Der Fehler tritt (nach Test mit dem Debugger an der markierten Stelle auf).
Vielleicht weiß ja jemand, warum das so ist. Ich habe ja schon ein Try .. Except .. End eingefügt, aber den Fehler kann ich - wahrscheinlich weil er extern bei Outlook und nicht bei Delphi auftritt - nicht abfangen. Ich weiß ja, wie ich es verhindern kann, einfach Outlook vorher starten. Aber auf der Arbeit funktioniert das auch ohne Fehler wenn Outlook nicht gestartet ist. Dort allerdings bei Windows XP.
Einloggen, um Attachments anzusehen!
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
jaenicke
      
Beiträge: 19325
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 07.09.13 10:14
Das sieht wie ein Pfadproblem aus. Schau doch mal im Process Monitor wo Outlook diese Datei liest, wenn du es separat startest und wo, wenn du es mit deinem Programm ansprichst.
Für diesen Beitrag haben gedankt: Tranx
|
|
Tranx 
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Sa 07.09.13 10:25
jaenicke hat folgendes geschrieben : | Das sieht wie ein Pfadproblem aus. Schau doch mal im Process Monitor wo Outlook diese Datei liest, wenn du es separat startest und wo, wenn du es mit deinem Programm ansprichst. |
Das kann schon sein. Denn Windows 7 führt ja das Roaming durch. Und ich habe schon festgestellt, dass die Datei Extend.Dat an mehreren Stellen (die gleichen?) unter Anwendungsdaten... auftauchte. Ich habe diese Dateien nach Anleitung im Internet auf die Frage nach dem Extend.dat-Problem gelöscht. Outlook erzeugt sie beim Start dann neu. Aber es hilft nichts. Das Problem besteht weiter, wenn ich bei meinem Windows 7-Rechner das Delphi-Programm ohne Outlook starte. Und wie kann ich denn dieses Pfadproblem lösen, an welcher Stelle? Auch will ich ja keinen festen Pfad festlegen, denn ich weiß ja nicht, ob dann das Programm unter Windows XP nicht mehr läuft, weil dann dort der Pfad falsch ist. Auf der Arbeit habe ich alle möglichen Kombinationen (Outlook XP, Outlook 2003, Outlook 2010, Windws XP, Windows 7 32 und 64-bit, Windows 2000). Bisher funktionieren alle Kombinationen ohne Probleme. Daher möchte ich da so wenig wie möglich eingreifen, verstehst Du?
Bisherige Lösung, die ich wohl beibehalte: dass ich erst Outlook aufrufe und dann das Delphi-Programm starte. Wieso ist dann das Problem plötzlich gelöst? Fragen über Fragen.
Ergänzung:
Ist Outlook nicht gestartet, dann existiert kein Outlook-Prozess. Wenn ich dann das Delphi-Programm starte und es wird Initoutlook aufgerufen, sind unter svchost plötzlich zwei Outlookprozesse. Die scheinen sich gegenseitig zu behindern. Das wird das Problem sein. Wenn Outlook vorher gestartet wurde, liegt es als eigenständiger Prozess vor und bei Initoutlook wird dann kein zusätzlicher Prozess in svchost gestartet. Und wenn Outlook nach dem Programm gestartet wird, greift Outlook dann auf den svchost-Outlook-Prozess zu und es liegt dann nur noch ein Prozess vor. Das nur zur Info. P.S. die zwei Prozesse können natürlich auch das Fehlerfenster und de Prozess selber sein.
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
jaenicke
      
Beiträge: 19325
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 07.09.13 11:16
Tranx hat folgendes geschrieben : | Und wie kann ich denn dieses Pfadproblem lösen, an welcher Stelle? |
Solange du nicht geschaut hast wo die denn nun versucht wird zu lesen, kann ich auch nichts dazu sagen. Denn nur das könnte Hinweise dazu bringen warum an dieser offenbar falschen Stelle gelesen wird. Oder wenn es die richtige ist, ob es dabei Zugriffsfehler gibt (bereits verwendet? ...).
|
|
Tranx 
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Sa 07.09.13 11:38
jaenicke hat folgendes geschrieben : | Tranx hat folgendes geschrieben : | Und wie kann ich denn dieses Pfadproblem lösen, an welcher Stelle? | Solange du nicht geschaut hast wo die denn nun versucht wird zu lesen, kann ich auch nichts dazu sagen. Denn nur das könnte Hinweise dazu bringen warum an dieser offenbar falschen Stelle gelesen wird. Oder wenn es die richtige ist, ob es dabei Zugriffsfehler gibt (bereits verwendet? ...). |
Wo frage ich ab, welcher Pfad benutzt wird? Ich sehe da keine Informationen, was der Prozess abfragt. Es erscheint ein kurzzeitig rot hinterlegter Prozess wenn das Delphi-Programm ohne Outlook auf Outlook zugreift. Für die genauere Recherche fehlen mir leider die Infs, wo ich z.B. Pfade und abgerufene Dateien erfahre. Aber egal - ich kenne ja die Lösung, so werde ich eben bis auf weiteres so vorgehen, auch wenn ich die Fehlerursache nicht kenne. Und selbst wenn ich es wüsste, was nützt es, da ich keine Möglichkeit sehe, Pfade im Voraus festzulegen.
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
jaenicke
      
Beiträge: 19325
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 07.09.13 12:08
Für diesen Beitrag haben gedankt: Tranx
|
|
Tranx 
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Sa 07.09.13 12:58
Entschuldige, ich habe den Prozessexplorer genommen. Da ist nichts zu finden. Ok, werde mal suchen, was er da anzeigt. Doch ernstlich, die Frage ist ja dann - falls es der falsche Pfad ist - wie ich das löse, ohne dass nachher der Fehler nicht bei Windows XP auftritt. Wie gesagt, wenn Outlook die Kontrolle über die Abfrage übernimmt (gestartetes Outlook) ist alles ok. Das reicht mir eigentlich schon, da ich dann keine weiteren Änderungen vornehmen muss, die anderweitig Problem verursachen könnten. Davon habe ich an der Arbeit bei einem derartigen Mix von Betriebssystemen und Officeversionen schon genug.
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
Tranx 
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Sa 07.09.13 17:23
Ich habe mal spaßeshalber den Prozessmonitor laufen lassen. Also so viele Einträge von "Name not found", dass es schon schwierig ist, den richtigen zu finden, zumal ein Filter ewig dauert. Man wundert sich nur, dass Windows überhaupt noch funktioniert.
Also, ich lasse es erstmal dabei, erst Outlook starten, und dann das Delphiprogramm.
Wenigstens danke für die Tipps.
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Sa 07.09.13 17:55
Tranx hat folgendes geschrieben : | Entschuldige, ich habe den Prozessexplorer genommen. Da ist nichts zu finden. |
Im Taskmanager Rechtsklick auf den Prozessnamen. Dann "Dateipfad öffnen".
Für diesen Beitrag haben gedankt: Tranx
|
|
jaenicke
      
Beiträge: 19325
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 07.09.13 19:06
|
|
|