Hallo zusammen,
ich habe da mit einem Problem zu "kämpfen" und hoffe daß mir jemand mit einem Tipp weiter helfen kann.
Zuerst liste ich in meinem Programm alle verfügbaren Laufwerke auf um sie anschließend,
nach Auswahl des Laufwerks, nach bestimmten Datei-Typen zu durchsuchen.
Soweit so gut.
Das Netzlaufwerk (Rechner mit NAS Software) bereitet mir ein wenig Kopf zerbrechen dabei.
Ich habe es zwar dank eines Code-Schnipsels den ich im Internet gefunden habe geschafft
das Netzlaufwerk aufzulisten, allerdings klappt das nur wenn es zum einen vorher einmal
über den Rechner auf dem ich das Programm laufen lasse aufgerufen habe, und zum anderen -
und das ist das größere Problem dabei - wird das Netzlaufwerk nur dann gefunden wenn ich das Programm nicht als Administrator starte. Gerade aber damit sollte ich es starten um auch
Zugriff auf evtl. gesperrte Ordner zu erhalten.
Hat einer von Euch evtl. eine Idee dazu ?
Der Code zum Verbinden mit dem Netzlaufwerk ist folgender:
Public Sub VerbindeNetzlaufwerke()
Dim p = Process.Start(New ProcessStartInfo() With {.FileName = "net", _
.Arguments = "use", .RedirectStandardOutput = True, .UseShellExecute _
= False})
Dim str = p.StandardOutput.ReadToEnd()
Dim CleanNet As String
For Each s As String In str.Split(New Char() {ControlChars.Cr, _
ControlChars.Lf}, StringSplitOptions.RemoveEmptyEntries)
If InStr(s, "keine Einträge") Then
Console.WriteLine("Kein Netzlaufwerk gefunden !")
End If
If InStr(s, "\\") <> 0 And InStr(s, ":") <> 0 Then
If InStr(s, "OK") <> 0 Then
'Verbundenes Netzlaufwerk
'Laufwerksbuchstabe aus String filtern
CleanNet = s.Substring((InStr(s, ":") - 2), 2)
ListBox1.Items.Add(CleanNet)
Else
'Nicht verbundenes Netzlaufwerk
Dim s2 = s.Split(New Char() {" "c}, _
StringSplitOptions.RemoveEmptyEntries)
Dim LaufwerksBuchstabe As String = ""
Dim URL As String = ""
For i As Integer = 0 To s2.Count - 1
If InStr(s2(i), ":") <> 0 Then LaufwerksBuchstabe = s2(i)
If InStr(s2(i), "\\") <> 0 Then URL = s2(i)
Next
MsgBox("Nicht verbunden: " + vbCrLf + LaufwerksBuchstabe + _
vbCrLf + URL)
Map(LaufwerksBuchstabe)
End If
End If
Next
End Sub
''' Verbindet nicht verbundene Netzlaufwerke
''' Der Übergabeparameter ist der Laufwerksbuchstabe mit Doppelpunkt
Public Sub Map(drive As String)
If Not New DriveInfo(drive).IsReady Then
Try
Process.Start(New ProcessStartInfo() With {.FileName = _
"explorer", .Arguments = drive & Convert.ToString("\"), _
.WindowStyle = ProcessWindowStyle.Minimized})
Thread.Sleep(500)
For Each p As Process In Process.GetProcessesByName("explorer")
If p.MainWindowTitle.EndsWith((Convert.ToString("(") & _
drive) + ":)", StringComparison.CurrentCultureIgnoreCase) _
Then
p.Kill()
End If
Next
Catch
End Try
End If
End Sub |