WNetAddConnection2 under Win Server 2016
Hi
Wir haben eine neue Citrix Farm eingerichtet. Die Alte Farm hatte WinSrv 2008, die Neue ist 2016. In Delphi mappe ich ein Laufwerk mit WNetAddConnection2...
Delphi-Quellcode:
TWNet.AddConnection(AppConfig.MapDrive, AppConfig.MapPath);
hier die Klassenmethode:
Delphi-Quellcode:
In der neuen Farm unter Server 2016 erhalte ich folgende Fehlermeldung:
class function TWNet.AddConnection(ADrive, AFolder, AUsername, APassword:
string; AUpdateProfile: Boolean = False): Boolean; var NetResource: TNetResource; dwFlags: DWORD; UserName: PChar; Password: PChar; AResult: Cardinal; begin //Sleep(500); with NetResource do begin dwType := RESOURCETYPE_DISK; lpLocalName := PChar(ADrive); lpRemoteName := PChar(AFolder); lpProvider := nil; end; if (AUpdateProfile) then dwFlags := CONNECT_UPDATE_PROFILE else dwFlags := 0 {CONNECT_TEMPORARY}; UserName := Nil; Password := Nil; if AUsername <> '' then UserName := PChar(AUsername); if APassword <> '' then Password := PChar(APassword); AResult := WNetAddConnection2(NetResource, Password, UserName, dwFlags); Result := (AResult = NO_ERROR); if not Result then raise Exception.Create('Fehler beim Verbinden Netzlaufwerk: ' + sLineBreak + ADrive + ' -> ' + AFolder + sLineBreak + ' Code: ' + IntToStr(AResult)); end; Fehler beim Verbinden Netzlaufwerk: ... Code 1202 Was könnte das Problem auslösen? Danke Frank |
AW: WNetAddConnection2 under Win Server 2016
Wie wird die Methode denn genutzt?
1202 bekomme ich nur wenn ich in den Flags CONNECT_UPDATE_PROFILE nutze und das Laufwerk bereits "bekannt" ist. Das passiert z.B wenn das Netzlaufwerk manuell gemappt wurde (mit der Checkbox "Verbindung bei Anmeldung wiederherstellen") Vielleicht vorher WNetCancelConnection2 nutzen? |
AW: WNetAddConnection2 under Win Server 2016
Es lohnt sich, die System Error Codes durchzuschauen, wenn man mit der Win32 API zu tun hat.
Die sagen in diesem Fall: Zitat:
Dalai |
AW: WNetAddConnection2 under Win Server 2016
Vielen Dank Chris und Dalai
Mir ist auch aufgefallen, dass ein auskommentiertes sleep(500) in meinen Sourcen ist. Ich prüfe natürlich vorher, ob das Laufwerk bereits verbunden ist und trenne dann auch. Ich werde das Sleep mal wieder aktivieren und morgen testen. Ich weiß nicht sicher, wie das bei der Windows API abläuft. Aber er scheint beim Verbinden mit dem Trennen doch noch nicht ganz fertig zu sein. Frank |
AW: WNetAddConnection2 under Win Server 2016
Also, meine Tests waren nicht erfolgreich :(
Wie schon erwähnt, prüfe trenne ich die Verbindung mit den folgenden Methoden:
Delphi-Quellcode:
class function TWNet.CancelConnection(ADrive: string; AUpdateProfile: Boolean =
False): Boolean; Var AResult: Cardinal; dwFlags: DWORD; begin if AUpdateProfile then dwFlags := CONNECT_UPDATE_PROFILE else dwFlags := 0; AResult := WNetCancelConnection2(PChar(ADrive), dwFlags, True); Result := (AResult = NO_ERROR); if not Result then raise Exception.Create('Fehler beim Trennen Netzlaufwerk ' + ADrive + sLineBreak + 'Code: ' + IntToStr(AResult)); end; class function TWNet.GetConnection(const ADrive: string): string; var Buff: array [0..255] of Char; Size : Cardinal; begin Size := SizeOf(Buff); if(NO_ERROR = WNetGetConnection(PChar(ADrive), Buff, Size))then Result := Buff; end; Trenne ich mit TWNet.CancelConnection... ...liefert mir TWNet.GetConnection einen Leeren String. Dennoch erhalte ich bei TWNet.AddConnection weiterhin den Code 1202, als wäre die Verbindung noch aktiv. Bei mir funktioniert es, allerdings bin ich als Admin angemeldet. Beim normalen Anwender kommt halt besagte Fehlermeldung. Ich werde wohl mal an den Rechten drehen müssen... Frank |
AW: WNetAddConnection2 under Win Server 2016
Äh, Netzlaufwerke sind schon immer nutzerspezifisch, d.h. jeder Benutzer hat seine eigenen Netzlaufwerke. Von daher ist es logisch, dass die Fehlermeldung nur beim Benutzer erscheint. An den Nutzer-/Zugriffsrechten rumzudrehen, sollte nur der allerletzte Ausweg sein!
Grüße Dalai |
AW: WNetAddConnection2 under Win Server 2016
Liste der Anhänge anzeigen (Anzahl: 1)
Falls doch mal jemand unter Citrix das gleiche Problem hat...
Es liegt scheinbar an Citrix. Ich habe den Anwender in einer Citrix-Sesssion mal den Path im Explorer eintagen lassen und er bekam die Meldung siehe Anhang. Diese Meldung wird beim Mappen im Code unterdrückt. Jetzt sind unsere Citrix - Profis dran. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 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