Zugeordnete Netzlaufwerke können nicht in C # aufgelistet werden

8

Ich versuche, alle lokalen Laufwerke in meiner Anwendung aufzulisten, und DriveInfo.GetDrives gibt die lokalen Laufwerksbuchstaben zurück, und ich brauche auch die zugeordneten Laufwerke.

Momentan habe ich: C :, D: und G: (HDD), E: und F: (CD) und S: und Z: (gemappte Netzlaufwerke). (Ja, sie sind alle im Windows Explorer sichtbar und auch im Total Commander .) Aber nur C, D, E, F, G werden programmgesteuert abgerufen.

Ich habe auch Environment.GetLogicalDrives() , GetLogicalDriveStrings (pInvoke) , FindFirstVolume und FindNextVolumen (pInvoke) ausprobiert. Ich habe versucht, die zugeordnete Laufwerksliste in der Registrierung zu finden. Nichts funktioniert, nur die HDD- und CD-Buchstaben werden zurückgesendet.

Es gibt keine Ausnahme, in den direkten WinAPI-Aufrufen wird kein Fehler angezeigt, und jetzt stecke ich fest. Ist es eine Art Sicherheitseinstellung? Wohin ich auch schaue, die Leute sagen, dass DriveInfo.GetDrives die gemappten Laufwerke zurückgeben sollte. Stimmt es wirklich?

Ich verwende Vista Home Pro. Die Anwendung wird vom lokalen Computer ausgeführt und wird auch hier mit Visual Studio 2008 erstellt.

Ich poste, was ich benutzt habe, aber es ist so einfach, es kann nicht sein, dass ich etwas falsch mache:

%Vor%

Ergebnis:     C: \     D: \     E: \     F: \     G:\     Drücken Sie eine beliebige Taste, um fortzufahren . . .

Wie kann ich es zum Laufen bringen?

    
Zolka 13.12.2009, 23:28
quelle

2 Antworten

8

OK, ich habe herausgefunden, wie man die getrennten Laufwerke unter Vista erhält. Nicht einfach, aber machbar:

Zuerst benötigen Sie die pInvoke-Definition der folgenden WinAPI-Funktionen:

  • WNetOpenEnum
  • WNetEnumResource
  • WNetCloseEnum

und diese benötigen eine Struktur und einige Enums.

Dann müssen Sie diese mehrmals aufrufen, und am Ende erhalten Sie die Liste. Hier ist der Code, Vorsicht, es ist lang:

%Vor%

Sie müssen die WNetResource () aufrufen, und Sie erhalten die Liste der Laufwerke zurück. (und Kuchen: -))

    
Zolka 14.12.2009 19:03
quelle
5

Environment.GetLogicalDrives() und DriveInfo.GetDrives() haben beide meine Netzwerklaufwerke zurückgegeben.

Wird Ihre Anwendung als anderer Benutzer ausgeführt (z. B. eine asp.net-Website)? Wenn dies der Fall ist, werden die Laufwerke tatsächlich für diesen Benutzer zugeordnet? Möglicherweise stellen Sie fest, dass die Laufwerke für Sie zugeordnet sind, sie jedoch nicht tatsächlich für den Benutzer zugeordnet sind, für den Ihre Anwendung ausgeführt wird.

    
fyjham 13.12.2009 23:33
quelle

Tags und Links