Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ausgabe von Fehlermeldungen in einer Consolenanwendung (https://www.delphipraxis.net/62040-ausgabe-von-fehlermeldungen-einer-consolenanwendung.html)

Klaus01 30. Jan 2006 09:23


Ausgabe von Fehlermeldungen in einer Consolenanwendung
 
Hallo,

ich habe eine kleine Consolenanwendung geschrieben.
Die Anwendung verbindet ein Netzlaufwerk auf einen freien Laufwerksbuchstaben
und startet von dort ein Programm, ist das Programm beendet wird das Netzlaufwerk
wieder getrennt.

Werden nun dem Programm Parameter übergeben, die nicht korrekt sind soll
eine Fehlermeldung ausgegben werden.
Die Fehlermeldung wird auch ausgegeben allerdings auch als Fenster
ich möchte die Meldung aber nur in der Console (DOS-Box) haben.

So wie hier dargestellt:
Zitat:

netinstall -s \\1234 -u test -p test2 -e setup.exe
Exception EOSError in module netInstall.exe at 0000A5AA.
System Error. Code: 67.
Der Netzwerkname wurde nicht gefunden.
Hiermit verbinde ich das Netzlaufwerk:

Delphi-Quellcode:
function ConnectNetworkDrive(const ADrive: String;
  const ADirectory, AUsername, APassword: String;
  const ARestoreAtLogon: Boolean ): Boolean;
var
  NetResource: TNetResource;
  dwFlags:    DWORD;
  lPwd, lUser: PChar;
begin
  NetResource.dwType:=RESOURCETYPE_DISK;
  NetResource.lpLocalName:=PChar(ADrive);
  NetResource.lpRemoteName:=PChar(ADirectory);
  NetResource.lpProvider:=nil;

  if ARestoreAtLogon then
    dwFlags:=CONNECT_UPDATE_PROFILE
  else
    dwFlags:=0;

  if AUsername<>'' then
    lUser:=PChar(AUsername)
  else
    lUser:=nil;

  if APassword<>'' then
    lPwd:=PChar(APassword)
  else
    lPwd:=nil;

  Result:=WNetAddConnection2(NetResource,
                             lPwd,
                             lUser,
                             dwFlags)=NO_ERROR;
end;
Kann man WNetAddConnection2 dazu bringen, die Fehlermeldungen
nur auf die Console auszugeben? Habe dazu bisher nichts gefunden.

Vielleicht hat ja jemand einen Rat.

Grüße
Klaus

marabu 30. Jan 2006 09:32

Re: Ausgabe von Fehlermeldungen in einer Consolenanwendung
 
Hallo Klaus,

du kannst die exception abfangen und in deinem Sinne behandeln - etwa so:

Delphi-Quellcode:
// ...
try
  Result := WNetAddConnection2(NetResource, lPwd, lUser, dwFlags) = NO_ERROR:
except
  on E: Exception do
  begin
    WriteLn(con, E.Message)
    // ... weitere Maßnahmen von dir
  end;
end;
Grüße vom marabu

Klaus01 30. Jan 2006 17:53

Re: Ausgabe von Fehlermeldungen in einer Consolenanwendung
 
Hallo,

ersteinmal danke an marabu.

Mit try und except ließ sich das Problem nicht beheben.
WNetAddConnection2 erzeugt keine Exception.
Das Fehlermeldungsfenster und der Text in der Console kam
von RaiseLastOSError. Asche auf mein Haupt!

Um den letzen Fehlercode von WNetAddConnection2 zu bekommen
sollte man GetLastError verwenden.

Folgende der Code wie er nun ist.

Grüße
Klaus

Delphi-Quellcode:
/********************************************************************************
function ConnectNetworkDrive(const ADrive: String;
  const ADirectory, AUsername, APassword: String;
  const ARestoreAtLogon: Boolean ): Boolean;
var
  NetResource: TNetResource;
  dwFlags:    DWORD;
  lPwd, lUser: PChar;
begin
  NetResource.dwType:=RESOURCETYPE_DISK;
  NetResource.lpLocalName:=PChar(ADrive);
  NetResource.lpRemoteName:=PChar(ADirectory);
  NetResource.lpProvider:=nil;

  if ARestoreAtLogon then
    dwFlags:=CONNECT_UPDATE_PROFILE
  else
    dwFlags:=0;

  if AUsername<>'' then
    lUser:=PChar(AUsername)
  else
    lUser:=nil;

  if APassword<>'' then
    lPwd:=PChar(APassword)
  else
    lPwd:=nil;

  Result:=WNetAddConnection2(NetResource,
                             lPwd,
                             lUser,
                             dwFlags)= NO_ERROR;
  if not Result then
    begin
      TextColor(yellow);
      WriteLn(SysErrorMessage(GetLastError));
      TextColor(lightGray);
    end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:24 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