Einzelnen Beitrag anzeigen

Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#17

AW: Netzwerkordnerzugriff

  Alt 30. Sep 2019, 11:01
Bei der Umstellung auf Lazarus habe ich hier nun ein Problem, ich rufe den logon in Lazarus wie folgt auf:

Delphi-Quellcode:
  
  //IPC wird vorher definiert, entspricht der IP-Adresse des anderen PC's
  Path := widestring('\\' + IPC + '\c$');
  err := Logon('', Path, 'username', 'password', true);
  if (err <> 0) then
  begin
    ShowMessage(IntToStr(err) + ' - ' + SysErrorMessage(err));
  end;
Erhalte aber immer einen Fehler:

Delphi-Quellcode:
//Netzlaufwerk verbinden
function TTools.Logon(Drive: String; Path: WideString; User, Password:String; TemporaryOnly : boolean):Cardinal;
var
  NetRes : TNetResource;
  tempres : Cardinal;
  dwFlags : Cardinal;
begin
  if islocalpath(String(Path)) then
  begin
    tempres := NO_ERROR; //No need to logon
  end else
  begin
    path := ExcludeTrailingPathDelimiter(ExpandUNCFileName(Trim(path)));

    // Windows-Share login
    NetRes.dwScope := RESOURCE_GLOBALNET;
    NetRes.dwDisplayType := RESOURCEDISPLAYTYPE_SHARE;//RESOURCEDISPLAYTYPE_GENERIC;
    NetRes.dwUsage := RESOURCEUSAGE_CONNECTABLE;
    NetRes.lpComment := '';

    // Nur diese Angaben sind notwendig..
    NetRes.dwType := RESOURCETYPE_DISK; // RESOURCETYPE_ANY;
    NetRes.lpLocalName := PChar(Drive);
    NetRes.lpRemoteName := PChar(path);
    NetRes.lpProvider := '';

    if TemporaryOnly then
    begin
      dwFlags := CONNECT_TEMPORARY; // 0
    end else
    begin
      dwFlags := CONNECT_UPDATE_PROFILE;
    end;

    // CONNECT_UPDATE_RECENT ?
    if User = 'then
    begin
      tempres := WNetAddConnection2(NetRes, nil, nil, dwFlags);
    end else
    begin
      tempres := WNetAddConnection2(NetRes, PChar(Password), PChar(User), dwFlags); //FEHLER, Passwort und Benutzernamen passen
    end;
  end;
  result := tempres;
end;
Die Fehlermeldung ist (aus meiner Sicht) wenig aussagend: Projekt Workstation hat Exception-Klasse >>External: SIGSEGV<< ausgelöst.

Evtl. habe ich die Ursache gefunden, jedoch noch keine Lösung.

path := ExcludeTrailingPathDelimiter(ExpandUNCFileName(Trim(path))); Sorgt dafür das "path" leer ist, ab "ExpandUNCFileName" das sollte wohl eher nicht so sein.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (30. Sep 2019 um 11:43 Uhr)
  Mit Zitat antworten Zitat