Laden...

[gelöst] Netzlaufwerke verloren

Erstellt von mogel vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.600 Views
mogel Themenstarter:in
156 Beiträge seit 2010
vor 13 Jahren
[gelöst] Netzlaufwerke verloren

Moin,

ich habe meine Netzlaufwerke verloren ... via DriveInfo.GetDrives() lasse ich mir alle Laufwerke liefern die im Rechner vorhanden sind ... funktioniert auch - nur eben nicht bei Netzlaufwerken ... die werden ignoriert ... selbst wenn ich das Netzlaufwerk direkt instanziere new DriveInfo("K:") funktioniert es nicht ... im Explorer ist das Laufwerk geöffnet und ich kann darauf zugreifen

wen im Framework muss ich bearbeiten das mir meine Netzlaufwerke (sind 3 Stück) angezeigt werden 🤔

hand, mogel

4.938 Beiträge seit 2008
vor 13 Jahren

Evtl. mit WMI, s. Use WMI to get drive information from local, network and mapped drives
bzw. Laufwerke und Laufwerkstypen ermitteln

Ansonsten geht das auch recht einfach mit:


for(char c = 'A'; c <='Z'; c++)
{
  DriveInfo di = new DriveInfo(c.ToString());
  bool istNetzwerk = (di.DriveType == DriveType.Network);
}

Aber was meinst du genau mit "verloren"?

mogel Themenstarter:in
156 Beiträge seit 2010
vor 13 Jahren

Evtl. mit WMI, s.
>

bzw.
>

mit WMI werde ich es dann am Montag versuchen - an nativ hatte ich auch schon gedacht

Ansonsten geht das auch recht einfach mit:

  
for(char c = 'A'; c <='Z'; c++)  
{  
  DriveInfo di = new DriveInfo(c.ToString());  
  bool istNetzwerk = (di.DriveType == DriveType.Network);  
}  
  

das klappt nicht ... hatte ich auch schon gemacht ... instanziere mal DriveInfo für ein Laufwerk was Du nicht hast (B:\ oder so) ... das ist dann das Gleiche wie bei mir für ein Netzlaufwerk ... sprich - für .NET existieren die Netzlaufwerke einfach nicht

Aber was meinst du genau mit "verloren"?

das ich die Dinger nicht über .NET finde 😃

mogel Themenstarter:in
156 Beiträge seit 2010
vor 13 Jahren

super ...


    Sub TestDriveSpace()
        'http://msdn.microsoft.com/en-us/library/aa394592(VS.85).aspx

        Dim objWMI As Object
        Dim colDisks As Object
        Dim objDisk As Object
        Dim strDriveType As String = "unsued"

        objWMI = GetWMIService

        ' determine free space
        colDisks = objWMI.ExecQuery _
                        ("Select * from Win32_LogicalDisk")
        For Each objDisk In colDisks

            With objDisk

                Try
                    Debug.WriteLine("DeviceID: " & .DeviceID)
                    ' assume GB
                    Debug.WriteLine("Size: " & Format(.Size / 1000000000, "# GB"))
                    ' assume GB
                    Debug.WriteLine("Free Disk Space: " _
                               & Format(.FreeSpace / 1000000000, "# GB"))
                    Debug.WriteLine("% Free: " & Format(.FreeSpace / .Size, "Percent"))

                    ' http://msdn.microsoft.com/en-us/library/aa394173(VS.85).aspx
                    Select Case .DriveType
                        Case 0
                            strDriveType = "Unknown"
                        Case 1
                            strDriveType = "No Root Directory"
                        Case 2
                            strDriveType = "Removable Disk"
                        Case 3
                            strDriveType = "Local Disk"
                        Case 4
                            strDriveType = "Network Drive"
                        Case 5
                            strDriveType = "Compact Disc"
                        Case 6
                            strDriveType = "RAM Disk"
                    End Select

                    Debug.Print("Drive Type: " & strDriveType)
                    If (strDriveType = "Local Disk") Or (strDriveType = "Network Drive") Then
                        Debug.WriteLine("File System: " & .FileSystem)
                    End If
                    If strDriveType = "Network Drive" Then
                        Debug.WriteLine("Provider Name: " & .ProviderName)
                    End If
                    Debug.WriteLine("---")

                Catch ex As Exception
                    Debug.WriteLine(ex.Message)
                End Try
            End With

        Next objDisk

    End Sub

liefert mir


DeviceID: C:
Size: 268 GB
Free Disk Space: 195 GB
% Free: 72,60%
Drive Type: Local Disk
File System: NTFS
---
DeviceID: D:
Size: 215 GB
Free Disk Space: 150 GB
% Free: 69,74%
Drive Type: Local Disk
File System: NTFS
---
DeviceID: E:
Size: 94 GB
Free Disk Space: 20 GB
% Free: 21,89%
Drive Type: Local Disk
File System: NTFS
---
DeviceID: F:
Eine Ausnahme (erste Chance) des Typs "System.InvalidCastException" ist in Microsoft.VisualBasic.dll aufgetreten.
Der Operator / ist für Typ DBNull und Typ Integer nicht definiert.
DeviceID: G:
Eine Ausnahme (erste Chance) des Typs "System.InvalidCastException" ist in Microsoft.VisualBasic.dll aufgetreten.
Der Operator / ist für Typ DBNull und Typ Integer nicht definiert.
DeviceID: H:
Eine Ausnahme (erste Chance) des Typs "System.InvalidCastException" ist in Microsoft.VisualBasic.dll aufgetreten.
Der Operator / ist für Typ DBNull und Typ Integer nicht definiert.
DeviceID: P:
Size: 42 GB
Free Disk Space: 6 GB
% Free: 15,06%
Drive Type: Local Disk
File System: NTFS
---

also quasi nichts - es fehlen noch immer die Netzlaufwerk K, L und S

hand, mogel

L
770 Beiträge seit 2006
vor 13 Jahren

Passen vielleicht die Netzlaufwerke nicht?

Der Code

for (char c = 'A'; c <= 'Z'; c++)
            {
                DriveInfo di = new DriveInfo(c.ToString());
                bool istNetzwerk = (di.DriveType == DriveType.Network);
                Console.WriteLine("{0}  {1}", c, istNetzwerk);
            }
            Console.ReadKey();

funktioniert tadelos und erkennt auch die Netzlaufwerke korrekt.

Lion

lg Lion

4.938 Beiträge seit 2008
vor 13 Jahren

Hallo mogel,

das scheint aber dann speziell bei dir nur so zu sein, denn es gibt etliche Beispiele im Netz, bei denen auch die gemappten Netzwerklaufwerke angezeigt werden, s. z.B.
Read free space on network drives
How Can I Determine Which Drives are Mapped to Network Shares?
Network Drive Free Space

Und selbst die einfache DriveInfo-Schleife liefert bei mir (WinXP) auch die Netzwerk-Laufwerke.

P.S. herbivore, ich bin lernfähig -)

mogel Themenstarter:in
156 Beiträge seit 2010
vor 13 Jahren

das scheint aber dann speziell bei dir nur so zu sein, denn es gibt etliche Beispiele im Netz, bei denen auch die gemappten Netzwerklaufwerke angezeigt werden, s.

anscheinend bin ich der einzige ... unter 1.1 uwsste ich das es nicht ging - hatte auch irgendwie im Kopf das die regel mit 2.0 wieder gestrichen wurde ... jedenfalls knallts

folgendes liefert mir eine DirdctoryNotFoundException - das Laufwerk ist aber da


        Try
            IO.Directory.CreateDirectory(IO.Path.Combine(drive, verzeichnis))
        Catch ex As Exception
            mylogger.err(ex)
        End Try

Und selbst die einfache DriveInfo-Schleife liefert bei mir (WinXP) auch die Netzwerk-Laufwerke.

genau wegen XP versuche ich das Problem ja zu lösen ... selber habe ich Win7 64 ... das Programm "läuft" produktiv auf WinXP 32 - mit einem Netzlaufwerk ... beide Rechner finden die Netzlaufwerke nicht X(

L
770 Beiträge seit 2006
vor 13 Jahren

Vielleicht passt das Ergebniss aus Combine nicht?

lg Lion

mogel Themenstarter:in
156 Beiträge seit 2010
vor 13 Jahren

*hass*, mein Unmut über UAC wächst mit jedem Tag den ich den Blödsinn nutzen muss,

ich habe mir jetzt nochmal ein kleines Programm geschrieben - nur ausgabe der Laufwerke

wenn ich kein Manifest drinnen habe, super ... sowie ich Manifest einbaue (benötige diverse Rechte) funktioniert es nicht mehr ... keine Zugriffsrechte auf Netzlaufwerke

kann ich das Problem entsprechend via UAC lösen??

mogel Themenstarter:in
156 Beiträge seit 2010
vor 13 Jahren

So,

es liegt wirklich nur an UAC ... das Problem ist via cmd.exe nachzuvollziehen ... wenn man es als Administrator ausführt sind auch da die Netzlaufwerke weg ... UAC kopiert die Netzlaufwerke nicht mit in die neue Session

KB937624: After you turn on User Account Control in Windows Vista, programs may be unable to access some network locations

leider funktioniert das nicht bei mir unter Win7

hand, mogel

Nachtrag: funktioniert doch - nur einfach Rechner neu starten