Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Erkennung, Netzlaufwerk nicht korrekt verbunden (https://www.delphipraxis.net/200010-erkennung-netzlaufwerk-nicht-korrekt-verbunden.html)

AJ_Oldendorf 11. Mär 2019 13:48

Erkennung, Netzlaufwerk nicht korrekt verbunden
 
Hallo zusammen,
ich denke ihr kennt das Problem, dass wenn man einen Windows Rechner neustartet, ab und zu das Problem auftaucht, dass das Netzlaufwerk als nicht korrekt verbunden angezeigt wird (rotes Kreuz im Laufwerks-Icon).
Macht man einen Doppelklick auf das Netzlaufwerk, wird die Verbindung wieder neu aufgebaut und das Icon ändert sich (rotes Kreuz verschwindet) und man kann in dem Laufwerk navigieren.
Es geht aber um den Zustand, dass das rote Kreuz da ist (nicht korrekt verbunden).
Kann man diesen Zustand mittels Quellcode erkennen?
Wenn man auf das Laufwerk lesend oder schreibend zugreifen will, dauert es ewig bis man eine Antwort bekommt. Diese fällt negativ aus, da das Laufwerk nicht korrekt verknüpft ist.
Um diese lange Wartezeit zu "überbrücken", gibt es Befehle diesen Zustand zu erkennen? Wenn ja, könnte man mittels Programm das Netzlaufwerk trennen und wiederherstellen oder was genau passiert beim Doppelklick?

Problematik tritt unter Win7 und Win10 auf

hhcm 11. Mär 2019 13:56

AW: Erkennung, Netzlaufwerk nicht korrekt verbunden
 
Hallo,

das Problem hat sicherlich schon jeder mal gehabt.
Wie man ein "kaputtes" Netzlaufwerk erkennen kann weiß ich leider nicht.
Ich bügel einfach vor dem Zugriff eine erneute Anmeldung drüber.
Seit dem habe ich keinen ärger mehr.

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;

pustekuchen 11. Mär 2019 14:03

AW: Erkennung, Netzlaufwerk nicht korrekt verbunden
 
Ja das Problem hatte ich auch bereits. Gelöst mit folgender Funktion. (Wenn der Laufwerksbuchstabe bekannt ist)
Delphi-Quellcode:
function RefreshMappedDrive(cDrvLetter: Char): Boolean;
const
  WbemUser           ='';
  WbemPassword       ='';
  WbemComputer       ='localhost';
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator : OLEVariant;
  FWMIService  : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject  : OLEVariant;
  oEnum        : IEnumvariant;
  iValue       : LongWord;
  WshNetwork   : OLEVariant;
begin;
  Result := False;

  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService  := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);
  FWbemObjectSet:= FWMIService.ExecQuery('SELECT LocalName,ConnectionState,RemotePath FROM Win32_NetworkConnection','WQL',wbemFlagForwardOnly);
  oEnum        := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    if String(FWbemObject.LocalName) = (cDrvLetter+':') then //if this drive
    begin
      if String(FWbemObject.ConnectionState) <> 'Connected' then //if disconnected
      begin
        //try to reconnect ....
        try
          WshNetwork := CreateOleObject('WScript.Network');
          WshNetwork.MapNetworkDrive(cDrvLetter+':', String(FWbemObject.RemotePath));
        except
        end;
        Result := True;
      end
      else
      begin
        Result := True;
      end;
      Break;
    end;
    FWbemObject:= Unassigned;
  end;
end;
Siehe auch hier: https://www.delphipraxis.net/1324091-post6.html

AJ_Oldendorf 11. Mär 2019 14:09

AW: Erkennung, Netzlaufwerk nicht korrekt verbunden
 
Danke, dass werde ich mal versuchen und die Erkenntnisse hier mitteilen.
Generell wäre es aber noch gut, diesen Zustand zu erkennen, da ich die oben beschriebenen Funktionen nicht zyklisch aufrufen will (ich weiß ja nicht, wann der Zustand aktiv ist und wann nicht)

pustekuchen 11. Mär 2019 14:28

AW: Erkennung, Netzlaufwerk nicht korrekt verbunden
 
Da das Problem ja nur nach dem Neustart des Rechners auftritt, würde es ja theoretisch einmal zum Programmstart ausreichen eine Prüfung zu machen.

Oder vor dem Zugriff auf den Pfad.

Delphi.Narium 11. Mär 2019 15:47

AW: Erkennung, Netzlaufwerk nicht korrekt verbunden
 
Schau Dir mal auf der Kommandozeile den Befehl net use an.

Er zeigt Dir alle Laufwerksmappings an und deren Status.

Die Ausgabe sollte so ähnlich aussehen:
Code:
C:\Users\irgendwer>net use
Neue Verbindungen werden nicht gespeichert.


Status      Lokal    Remote                   Netzwerk

-------------------------------------------------------------------------------
OK          X:       \\server.home.lan\public Microsoft Windows Network
OK          Y:       \\server.home.lan\irgendwer  Microsoft Windows Network
Der Befehl wurde erfolgreich ausgeführt.
Wenn unter Status was anderes als OK steht, muss die Verbindung neu gemacht werden.

Prinzipiell reicht es aus, ein Dir oder 'nen Laufwerkswechsel auf die entsprechenden Laufwerke zu machen. Es dauert dann immer ein bisserl, bis die Laufwerksverbindung von Windows wiederhergestellt wurde.

Da das Problem nach 'nem Rechnerstart auftritt, sollte es reichen, eine entsprechende Routine in den Autosstartordner zu legen oder unter Run in die Registry.

Da das alles über die Windows-API geregelt wird, kann man dazu natürlich auch die entsprechenden API-Aufrufe nehmen.

https://docs.microsoft.com/de-de/win...e-netshareenum

https://www.delphipraxis.net/30501-p...shareenum.html


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