Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Oulook Kontakte auslesen geht nicht unter C:\Programme (https://www.delphipraxis.net/174681-oulook-kontakte-auslesen-geht-nicht-unter-c-%5Cprogramme.html)

süden 5. Mai 2013 11:51

Oulook Kontakte auslesen geht nicht unter C:\Programme
 
Hallo, ich habe einen Kontaktimport von Outlook (bei mir OL2010,D2007pro, WIN7) eingebaut.

Code von den Schweizern:
Delphi-Quellcode:
procedure TmodOutlook.btnReadOutlookClick(Sender: TObject);
const
  olFolderContacts = $0000000A;
var
  outlook, NameSpace, Contacts, Contact: OleVariant;
begin
  for i := 1 to Contacts.Items.Count do
  begin
    Contact := Contacts.Items.Item(i);
    FrecAdr.FBirthday                := Contact.Birthday;
    FrecAdr.FCompanyName             := Contact.CompanyName ;
    ...
  Finally
    Outlook := UnAssigned;
  End;
Läuft prima! Setup gebastelt, losgeschickt. Fehler!
Code:
Es ist folgender Fehler aufgetreten:Fehlertyp: Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben [EOleException]
Dann habe ich das Programm bei mir auf C:\Programme installiert und es kommt ebenfalls der Fehler. Auf D:\Programme nicht.
Ich bin nicht so tief in der Materie drin und wage mich zum ersten mal an OLE usw.

Was läuft da schief? Was kann ich tun? Wonach suchen? Was lesen?

Gruß süden

Aviator 5. Mai 2013 12:23

AW: Oulook Kontakte auslesen geht nicht unter C:\Programme
 
Programm als Admin ausgeführt? Wie sieht es mit den Berechtigungen in den jeweiligen Ordnern aus?

süden 5. Mai 2013 12:34

AW: Oulook Kontakte auslesen geht nicht unter C:\Programme
 
Im Manifest: level="asInvoker" ",
bei der Ausführung: "Als Admin".

Das Programm sollte aber auch für Nichtadministratoren laufen. Ich kann als Entwickler nicht wissen/verlangen, dass der Anwender nur mit Admin-Konto laufen lässt.

Ich blicks gerade nicht mehr, das Thema (UAC ...) ist für mich ziemlich neu.

jaenicke 5. Mai 2013 20:26

AW: Oulook Kontakte auslesen geht nicht unter C:\Programme
 
Du schreibst vermutlich aus Versehen irgendeine Datei in das eigene Verzeichnis. Mit dem Process Monitor solltest du recht schnell herausfinden können was da schief läuft.
(Einfach den Filter auf "Process Name" is "DeineExe.exe" setzen und schauen was passiert...)

süden 5. Mai 2013 22:14

AW: Oulook Kontakte auslesen geht nicht unter C:\Programme
 
Um Unklarheitzen zu vermeiden, das Programm selbst läuft gut, nur das Öffnen der Outlook Kontakte wirft den Fehler.
Mir ist nicht bewußt, welche Datei geschrieben werden soll. Mein Programm schreibt ganz sicher keine in das Programmverzeichnis.

Die Prozesskontrolle mache ich morgen. Mal sehen.

Gruß süden

p80286 5. Mai 2013 22:38

AW: Oulook Kontakte auslesen geht nicht unter C:\Programme
 
Ich denke zumindestens die Initialisierung von
Delphi-Quellcode:
outlook
fehlt.

Gruß
K-H

baumina 6. Mai 2013 07:43

AW: Oulook Kontakte auslesen geht nicht unter C:\Programme
 
Dein Codeausschnitt ist sehr unvollständig, es fehlen die Initialisierungen von mehreren Variablen, ein finally ohne try und das noch innerhalb einer for-Schleife, kann ich mir so alles nicht recht vorstellen.

süden 6. Mai 2013 14:11

AW: Oulook Kontakte auslesen geht nicht unter C:\Programme
 
Mein Codausschnitt war unsauber zusammen gefasst - blöd von mir.
Hier noch mal das fast Ganze:
Delphi-Quellcode:
procedure TmodOutlook.btnReadOutlookClick(Sender: TObject);
const
  olFolderContacts = $0000000A;
var
  outlook, NameSpace, Contacts, Contact: OleVariant;
  i: Integer;
  s :String;
begin
  outlook := CreateOleObject('Outlook.Application');
  NameSpace := outlook.GetNameSpace('MAPI');

  Contacts := NameSpace.GetDefaultFolder(olFolderContacts);

  Try
    grdTVOL.DataController.BeginFullUpdate;
    for i := 1 to Contacts.Items.Count do
    begin
      Contact := Contacts.Items.Item(i);
      FrecAdr.FCompanyName             := Contact.CompanyName ;
      FrecAdr.FFirstName               := Contact.FirstName ;
      ... Anschließend das Einbauen der Werte in ein Grid ...
     
  Finally
    grdTVOL.DataController.EndFullUpdate;
    Outlook := UnAssigned;
  End;

end;
Es läuft alles prima, wenn ich den Programmordner nur kopiere, auch auf C:\.
Wenn ich es installiere (Inno) kommt die oben gezeigte Fehlermeldung.

Ausschnitt Inno-Script:
Code:
MinVersion=5.1.2600
[Dirs]
PrivilegesRequired=admin
Name: "{commonappdata}\ocm\BUEROplus3\Konfig"; Permissions: everyone-full authusers-full users-full;
Source: ocmBuero3.exe; DestDir: {app}; Permissions: everyone-full authusers-full users-full;
Das spricht der Prozess-Explorer ab Button-Click bis zur Fehlermeldung:
Code:
Event Class:   Registry | Operation:   RegQueryKey
Result:   BUFFER TOO SMALL
Path:   HKCU\Software\Classes\CLSID\{33C53A50-F456-4884-B049-85FD643ECFED}
TID:   3744 | Duration:   0.0000040 | Query:   Full | Length:   0
--------------------------------------------------------------------------
Event Class:   Registry | Operation:   RegOpenKey
Result:   NAME NOT FOUND
Path:   HKCU\Software\Classes\CLSID\{DEE35070-506B-11CF-B1AA-00AA00B8DE95}\ExtendedErrors
TID:   3744 
Duration:   0.0000077
Desired Access:   Read
--------------------------------------------------------------------------
Date & Time:   06.05.2013 14:46:04
Event Class:   Registry
Operation:   RegOpenKey
Result:   NAME NOT FOUND
Path:   HKCU\Software\Classes\CLSID\{dee35070-506b-11cf-b1aa-00aa00b8de95}\ExtendedErrors
TID:   3744 | Duration:   0.0000057 | 
Desired Access:   Maximum Allowed
--------------------------------------------------------------------------
Event Class:   File System | Operation:   QueryOpen | 
Result:   FAST IO DISALLOWED
Path:   C:\ProgramData\ocm\BUEROplus3\Konfig\Errorlog.txt
TID:   3744 | Duration:   0.0000013
Die gleichen Meldungen kommen auch bei der nur kopierten, lauffähigen Version.
Aus der IDE läufts also schwer zu finden.

Hat das etwas mit der UAC zu tun?
Ich habe zwar schon viel gelesen, aber immer noch nicht ganz kapiert.
Installieren als admin, Ausführen als normaler User ...

Der Outlook-Import läuft auch nach der Installation auf D:\.. nicht.

baumina 6. Mai 2013 14:22

AW: Oulook Kontakte auslesen geht nicht unter C:\Programme
 
Da du es nicht debuggen kannst, musst du wohl zur alten Methode greifen und an wichtigen Stellen ein ShowMessage einbauen, um den Fehler besser eingrenzen zu können, vielleicht kommst du ja dann einen Schritt weiter.

süden 6. Mai 2013 14:28

AW: Oulook Kontakte auslesen geht nicht unter C:\Programme
 
Das verrückte ist, wenn ich die Exe nach der Installation von Hand einkopiere geht's.

baumina 6. Mai 2013 14:44

AW: Oulook Kontakte auslesen geht nicht unter C:\Programme
 
Zitat:

Zitat von süden (Beitrag 1214335)
Das verrückte ist, wenn ich die Exe nach der Installation von Hand einkopiere geht's.

Es handelt sich dabei um genau die selbe exe-Datei, Größe, Datum, Version ... alles identisch?

süden 6. Mai 2013 15:05

AW: Oulook Kontakte auslesen geht nicht unter C:\Programme
 
Ja, DIE exe. Sowas habe ich nicht nicht erlebt.

ABER, ich habs:
Ich habe jede einzelne Zeile mit einem Try-Block + Msg umgeben.
Da liefs + Errors.

Es war die Komponente von DeveloperExpress TdxMemData. Die habe ich mit einem Active := True geöffnet. Jetzt mache ich es mit einem Open und es geht.

Aber trotzdem, wieso das aus der IDE und mit der kopierten Datei ging ist mir immer noch schleierhaft.

p80286 6. Mai 2013 15:39

AW: Oulook Kontakte auslesen geht nicht unter C:\Programme
 
Zitat:

Zitat von süden (Beitrag 1214349)
Ja, DIE exe. Sowas habe ich nicht nicht erlebt.

Unglaublich

Zitat:

Zitat von süden (Beitrag 1214349)
Aber trotzdem, wieso das aus der IDE und mit der kopierten Datei ging ist mir immer noch schleierhaft.

Wenn man Komponenten auf Actve/connected/... setzt, ist diese Vorraussetzung in der IDE meist erfüllt, hinterher im Compilat dann nicht mehr. Tritt oft bei DB-Entwicklungen auf.

Gruß
K-H

süden 6. Mai 2013 17:36

AW: Oulook Kontakte auslesen geht nicht unter C:\Programme
 
Ich setze die Komponenten vorher in der IDE nie auf aktiv/Open - immer nur zur Runtime.
In manchem steckt man eben auch nicht drin.
Auf jeden Fall wird mir jetzt klar, warum es besser ist ein paar EUR mehr auszugeben und die Komponenten mit Quellcode zu kaufen. Ich habe sie von DevEx ohne.

jaenicke 6. Mai 2013 20:04

AW: Oulook Kontakte auslesen geht nicht unter C:\Programme
 
Zitat:

Zitat von süden (Beitrag 1214380)
Auf jeden Fall wird mir jetzt klar, warum es besser ist ein paar EUR mehr auszugeben und die Komponenten mit Quellcode zu kaufen. Ich habe sie von DevEx ohne.

Nicht nur darum. Sollte es mal einen Fehler in der Komponente geben, kann man den mit Quelltext auch selbst korrigieren, ohne nicht. Gerade, wenn die Komponenten dann nicht in der aktuellen Version benutzt werden, ist das ärgerlich, weil man je nach Hersteller ggf. dann deshalb ein Upgrade kaufen muss. Und auch wenn die Version noch supportet wird, muss man auf den Hersteller warten.
Außerdem weiß man manchmal auch nicht, ob man ein unerwünschtes Verhalten vielleicht per Option ändern kann (oder es ein Fehler ist), und muss dazu jedesmal fragen.

Unterm Strich lohnt sich deshalb der Verzicht auf den Quelltext normalerweise kaum, zumindest wenn es um berufliche Nutzung geht. Am Ende zahlt man im Zweifelsfall in Form von Arbeitszeit drauf, auch wenn man das vorher natürlich nicht vorhersagen kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz