2010-12-06 1 views
1

ich diesen Code bin mit der Datenträger-SerienGetVolumeInformation für Netzwerk-Laufwerke, wenn Admin 0 zurück

[DllImport("Kernel32.dll", SetLastError = true)] 
    extern static bool GetVolumeInformation(string vol, StringBuilder name, int nameSize, out uint serialNum, out uint maxNameLen, out uint flags, StringBuilder fileSysName, int fileSysNameSize); 


    public static uint GetVolumeSerial(string strDriveLetter) 
    { 
     uint serialNum, maxNameLen, flags; 
     bool ok = GetVolumeInformation(strDriveLetter, null, 0, out serialNum,out maxNameLen, out flags, null, 0); 
     return serialNum; 
    } 

Es funktioniert großartig abrufen, außer wenn ich als Administrator durch die Anwendung manifestieren UAC renne immer zurückkehrt 0 für gemappte Netzlaufwerke (aber es funktioniert anders)

Vielleicht sieht der Administrator-Benutzer das zugeordnete Laufwerk aus irgendeinem Grund nicht (Sie würden denken, dass es umgekehrt war). Gibt es eine Möglichkeit, diesen Code als angemeldeten Benutzer aufzurufen?

Ich bin auf 64-Bit Windows 7, aber die Anwendung im x86-Modus

Antwort

0

Netzlaufwerke für einen Benutzer zugeordnet werden, ausgeführt wird. Wenn Sie als anderer Benutzer eine Verbindung herstellen, ist das Laufwerk für diesen anderen Benutzer nicht vorhanden. Wenn Sie mehrere Benutzer benötigen, um auf denselben Netzwerkpfad zuzugreifen, verwenden Sie den tatsächlichen UNC-Pfad ("\\server\path"). Ein zugeordnetes Netzlaufwerk ist nur eine Annehmlichkeit für Menschen.

Wenn Sie wirklich mehrere Benutzer benötigen, um auf das zugeordnete Netzlaufwerk zuzugreifen, müssen Sie es für jeden Benutzer separat zuordnen. Sie könnten dies beispielsweise in einer Batch-Datei tun, die bei der Anmeldung jedes Benutzers ausgeführt wird, und ruft net use auf (ich bin mir nicht ganz sicher, ob es bei Benutzern wie SYSTEM helfen würde).

+0

Ich kann nicht bewirken, wie Menschen ihre Laufwerke zuordnen und ich muss auf die serielle über den Laufwerksbuchstaben zugreifen – Homde

+0

Dann müssen Sie es während der Ausführung als der gleiche Benutzer, der das Laufwerk zugeordnet (oder Sie müssen implementieren müssen) eine Logik, die die "Bedeutung" des zugeordneten Laufwerks irgendwo speichert, bevor es erhöht wird. –