AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Erkennung, Netzlaufwerk nicht korrekt verbunden
Thema durchsuchen
Ansicht
Themen-Optionen

Erkennung, Netzlaufwerk nicht korrekt verbunden

Ein Thema von AJ_Oldendorf · begonnen am 11. Mär 2019 · letzter Beitrag vom 11. Mär 2019
Antwort Antwort
AJ_Oldendorf

Registriert seit: 12. Jun 2009
385 Beiträge
 
Delphi 12 Athens
 
#1

Erkennung, Netzlaufwerk nicht korrekt verbunden

  Alt 11. Mär 2019, 14:48
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

Geändert von AJ_Oldendorf (11. Mär 2019 um 14:53 Uhr)
  Mit Zitat antworten Zitat
hhcm

Registriert seit: 12. Feb 2006
Ort: Wegberg
310 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Erkennung, Netzlaufwerk nicht korrekt verbunden

  Alt 11. Mär 2019, 14:56
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;
Chris
  Mit Zitat antworten Zitat
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Erkennung, Netzlaufwerk nicht korrekt verbunden

  Alt 11. Mär 2019, 15:03
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) <> 'Connectedthen //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
Delphi programming is awesome.
  Mit Zitat antworten Zitat
AJ_Oldendorf

Registriert seit: 12. Jun 2009
385 Beiträge
 
Delphi 12 Athens
 
#4

AW: Erkennung, Netzlaufwerk nicht korrekt verbunden

  Alt 11. Mär 2019, 15:09
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)
  Mit Zitat antworten Zitat
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Erkennung, Netzlaufwerk nicht korrekt verbunden

  Alt 11. Mär 2019, 15:28
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 programming is awesome.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#6

AW: Erkennung, Netzlaufwerk nicht korrekt verbunden

  Alt 11. Mär 2019, 16:47
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 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