Die zugeordneten Netzwerk-Laufwerke aufgelistet werden können, die in C#
Ich versuche, um eine Liste aller lokalen Laufwerke in meiner Anwendung, und DriveInfo.GetDrives
zurück geben Sie den lokalen Laufwerkbuchstaben zu, und ich brauche die zugeordneten Laufwerke zu.
Derzeit habe ich: C:, D: und G: (HDD), E: und F: (CD) und S: und Z: (zugeordneter Netzlaufwerke). (Ja, Sie sind alle sichtbar, in Windows Explorer und in Total Commander zu.)
Aber nur C, D, E, F, G abgerufen werden programmgesteuert.
Ich habe auch versucht Environment.GetLogicalDrives()
, GetLogicalDriveStrings (pInvoke)
, FindFirstVolume
und FindNextVolumen
(pInvoke). Ich habe versucht zu finden, das zugeordnete Laufwerk Liste in der registry. Nichts funktioniert, nur die Festplatten und CD-Rom Buchstaben sind retreived.
Gibt es nicht irgendeine Ausnahme kommt, wird kein Fehler angezeigt, in den die direkte WinAPI-Aufrufe, und jetzt bin ich stecken. Ist es eine Art von Sicherheits-Einstellung? Überall, wo ich schaue, die Leute sagen, dass die DriveInfo.GetDrives
geben sollte zurück die zugeordneten Laufwerke. Ist es wirklich wahr?
Ich bin mit Vista Home Pro. Die Anwendung läuft auf dem lokalen Rechner, und es wird gebaut, auch hier mit Visual Studio 2008.
Ich nach, was ich verwendet, aber es ist so einfach, es kann nicht sein, dass ich etwas falsch mache:
foreach (System.IO.DriveInfo di in System.IO.DriveInfo.GetDrives())
Console.WriteLine(di.Name);
Ergebnis:
C:\
D:\
E:\
F:\
G:\
Drücken Sie eine beliebige Taste, um fortzufahren . . .
Wie kann ich machen, damit es funktioniert?
- Laufen Sie diese im user-Modus, oder im service?
- Im Benutzer-Modus. Ganz normale Konsolenanwendung, oder WinForm-app.
Du musst angemeldet sein, um einen Kommentar abzugeben.
OK, ich fand heraus, wie man die getrennten Laufwerke auf Vista. Nicht einfach, aber es ist machbar:
Zuerst müssen Sie die pInvoke-definition der folgenden WinAPI-Funktionen:
und diese müssen eine Struktur und einige enums als gut.
Dann müssen Sie rufen Sie diese mehrere Male, und am Ende bekommen Sie eine Liste.
Hier ist der code, Vorsicht, es wird lang:
Habe Sie rufen die WNetResource(), und Sie erhalten wieder die Liste der Laufwerke. (und Kuchen :-))
Environment.GetLogicalDrives()
undDriveInfo.GetDrives()
beide kehrten alle meine vernetzten Laufwerke.Ist Ihre Anwendung als ein anderer Benutzer (Zum Beispiel ein asp.net website)? Wenn es ist, werden die Laufwerke tatsächlich zugeordnet, die Benutzer? Sie werden feststellen, dass die Laufwerke sind für Sie abgebildet, aber Sie sind nicht wirklich zugeordnet, für die der Benutzer Ihre Anwendung ausgeführt wird.