![]() |
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? |
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?
|
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.
|
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:
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!
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; 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. |
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. |
AW: Netzlaufwerk trennen Buchstabe bleibt
Zitat:
Was anderes hab ich noch nicht gefunden. Zitat:
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. |
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?
|
AW: Netzlaufwerk trennen Buchstabe bleibt
Zitat:
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? |
AW: Netzlaufwerk trennen Buchstabe bleibt
Ich nutze die Funktion so
Delphi-Quellcode:
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".
WNetCancelConnection2('T:',0, True);
|
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