Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Netzlaufwerk trennen Buchstabe bleibt (https://www.delphipraxis.net/154765-netzlaufwerk-trennen-buchstabe-bleibt.html)

gmc616 24. Sep 2010 09:37

Netzlaufwerk trennen Buchstabe bleibt
 
Hallo DP,

Ich verbinde im meiner Application ein Netzlaufwerk und trenne es anschließend wieder.

Zu Trennen nutze ich
Delphi-Quellcode:
WNetCancelConnection2(PWideChar(Laufwerk),CONNECT_UPDATE_PROFILE, TRUE);

Das Laufwerk wird korrekt getrennt, nur bleibt im Exporer der Laufwerksbuchstabe zurück mit dem Name "Nicht verbundenes Netzlaufwerk"

Wie bekomme ich den Laufwerksbuchstaben wieder frei?

DeddyH 24. Sep 2010 10:22

AW: Netzlaufwerk trennen Buchstabe bleibt
 
Eigentlich sollte CONNECT_UPDATE_PROFILE dafür sorgen, dass der Laufwerksbuchstabe "befreit" wird (sofern ich das MSDN richtig verstanden habe). Welchen Wert gibt die Funktion denn zurück?

SirThornberry 24. Sep 2010 10:25

AW: Netzlaufwerk trennen Buchstabe bleibt
 
Ich kenne es zwar auch so das im Explorer weiterhin das Laufwerk angezeigt wird aber der Buchstabe ist, wenn ich mich richtig erinnere, trotzdem frei um wieder genutzt zu werden.

gmc616 24. Sep 2010 14:30

AW: Netzlaufwerk trennen Buchstabe bleibt
 
WNetCancelConnection2(..) gibt NO_ERROR zurück.
Ich kann/könnte den Laufwerksbuchstaben auch wieder frei für ein neues Netzlaufwerk verwenden. Das passt schon.


Allerdings suche ich mir vor dem Netzlaufwerk-Verbinden einen freien Laufwerksbuchstaben herraus.
Da aber der Explorer die getrennten Netzlaufwerksbuchstaben beibehält, bekommen ich immer wieder einen neuen Buchstaben zurück, bis ich letztendlich keinen Buchstaben mehr zur Verfügung habe.

PseudoCode:
Delphi-Quellcode:
For LW := 'Z' downto 'C' do
  if Not DriveIsReady(LW) then
     Result := LW;

DriveIsReady:
Delphi-Quellcode:
function DriveIsReady(const Drive: string): Boolean;
  var
    wfd       : TWin32FindData;
    hFindData : THandle;
  begin
    SetErrorMode(SEM_FAILCRITICALERRORS);
    hFindData := FindFirstFile(Pointer(Drive + '*.*'), wfd);
    if hFindData <> INVALID_HANDLE_VALUE then
    begin
      Result := True;
    end
    else
    begin
      Result := False;
    end;
    Windows.FindClose(hFindData);
    SetErrorMode(0);
  end;
Letztendlich habe ich "eine ganze Latte" an getrennten Netzlaufwerken in meinem Explorer stehen, die alle frei wären, aber mein Programm findet keinen freien Laufwerksbuchstaben. Das is 'n bissl doof!

Entweder muß ich der Funktion DriveIsReady etwas ändern, damit sie getrennte Laufwerke berücksichtigt (nur was :gruebel:), oder aber ich kriege den Laufwerksbuchstaben aus dem Explorer, was mir lieber wäre.

SirThornberry 24. Sep 2010 14:47

AW: Netzlaufwerk trennen Buchstabe bleibt
 
Ich würde die Funktion DriveIsReady ändern. Es gibt eine Funktion mit der man sich alle Laufwerksbuchstaben zurück geben lassen kann. Vielleicht gibt diese andere Werte zurück.
Ansonsten: Wenn du sowieso jedes Laufwerk einzeln prüfst ob es belegt ist, kannst du auch in einer Schleife alle Buchstaben durchlaufen und versuchen ein Netzlaufwerk zu verbinden bis kein Fehler zurück gegeben wird.

gmc616 24. Sep 2010 15:04

AW: Netzlaufwerk trennen Buchstabe bleibt
 
Zitat:

Zitat von SirThornberry (Beitrag 1051718)
Ich würde die Funktion DriveIsReady ändern. Es gibt eine Funktion mit der man sich alle Laufwerksbuchstaben zurück geben lassen kann. Vielleicht gibt diese andere Werte zurück.

GetLogicalDriveStrings gibt mir alle Laufwerke wieder, allerdings auch die getrennten Netzlaufwerke.
Was anderes hab ich noch nicht gefunden.

Zitat:

Zitat von SirThornberry (Beitrag 1051718)
Ansonsten: Wenn du sowieso jedes Laufwerk einzeln prüfst ob es belegt ist, kannst du auch in einer Schleife alle Buchstaben durchlaufen und versuchen ein Netzlaufwerk zu verbinden bis kein Fehler zurück gegeben wird.

Hmmm ... könnte man tun, finde ich aber nicht so toll.
Und es bleibt immer noch die Tatsache, dass der Laufwerksbuchstabe im Explorer sichtbar bleibt.
Muß ja in meinem Fall nicht jeden sehen, dass da ein Netzlaufwerk gemappt wurde.

samso 24. Sep 2010 17:05

AW: Netzlaufwerk trennen Buchstabe bleibt
 
Wenn das nicht jeder sehen soll, dann könntest Du doch auch das Netzwerklaufwerk ohne Mapping über den UNC-Pfad benutzen?

CodeX 4. Okt 2010 13:04

AW: Netzlaufwerk trennen Buchstabe bleibt
 
Zitat:

Zitat von gmc616 (Beitrag 1051668)
Zu Trennen nutze ich
Delphi-Quellcode:
WNetCancelConnection2(PWideChar(Laufwerk),CONNECT_UPDATE_PROFILE, TRUE);
Das Laufwerk wird korrekt getrennt, nur bleibt im Exporer der Laufwerksbuchstabe zurück mit dem Name "Nicht verbundenes Netzlaufwerk"

Dann bin ich also nicht der einzige mit diesem Problem. Dies scheint irgendein Bug der Funktion zu sein, denn das Problem tritt nicht bei allen Systemen auf! Bei den meisten Systemen verschwindet der Laufwerksbuchstabe aus dem Explorer wieder, bei manchen nicht.
Ich wäre brennend an der Ursache interessiert bzw. noch mehr an einer Lösung dafür. Es kommt durchaus auch ein Workaround in Frage. Der die Buchstaben explizit wieder freigibt. Hat jemand eine Idee?

simmi 4. Okt 2010 13:27

AW: Netzlaufwerk trennen Buchstabe bleibt
 
Ich nutze die Funktion so
Delphi-Quellcode:
 WNetCancelConnection2('T:',0, True);
und bei XP und Windows 7 verschwindet das Laufwerk auch vom Arbeitsplatz und vom Explorer. Einziger Unterschied statt "CONNECT_UPDATE_PROFILE" schreibe ich die "0".


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