Abfrage Netzlaufwerk (NAS-Server):RUCKLER in IDE

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Knally.

    Abfrage Netzlaufwerk (NAS-Server):RUCKLER in IDE

    Hallo,
    Ich möcht einen NAS-Server in mein Visual Basic Programm einbinden: das heisst fürs erste mal - checken ob der Server online ist und ob ein Ordner "xyz" existiert und dort eben Sachen mittels Write und Read abgelegt /gelesen werden können.

    Wenn der NAS-Server online ist, ist er unter dem Netzordner "\\10.10.103.99\data\Verschiedenes" im Windows-Explorer zu erreichen. Programmtechnisch sieht das bei mir so aus:

    Visual Basic-Quellcode

    1. Try 'Ausnahmebehandlung
    2. pathNAS = "\\10.10.103.99\data\Verschiedenes"
    3. If IO.Directory.Exists(pathNAS) = True Then
    4. NAS_online = True
    5. Else
    6. NAS_online = False
    7. End If
    8. Catch
    9. err = "Meldung 11000: Fehler bei NAS Abfrage!"
    10. System.Windows.Forms.MessageBox.Show(err)
    11. End Try


    Wenn ich das "fertige" Programm mittels Debugger starte - findet er diesen Server unter dieser Netzadresse (falls online) und ich kann mit Write und Read Befehlen Text - und .csv Dateien erstellen.


    So weit so gut: Ein etwas unerwartetes Problem ist jedoch:
    Wenn ich den Server ausschalte. Dann ruckelt das Programm stark. Und zwar nicht nur die ausgeführte .exe nach dem Debuggen sondern sogar die Entwicklungsumgebung an sich, ohne eine laufende .exe im Hintergrund (?). Das Programm und der PC wird durch die regelmässigen Ruckler quasi unverwendbar ( auch wenn es sich nach 12 Sekunden immer wieder "findet") Wird hier schon in der IDE nach dem Ordner abgefragt oder etwas initialisiert ? Die Abfrage ist in einem Timer - den ich testweise natürlich auch deaktiviert habe ... ohne Erfolg. Wie kann ich das unterbinden ? (gibt es auch alternative Abfragemöglichkeiten des Netzwerks, bzw. wie ist die korrekte Abfragemöglichkeit - get.Driveinfo ?)


    Als IDE verwende ich Visual Basix Express 2010 (ist alles in VB.Net geschrieben). Sollte hoffentlich mal "noch" kein Problem darstellen. Ich will ja keine Mondlandung schreiben.

    Ich bin gerade dabei die Netzwerkabfrage mittels:
    getDriveInfo() und eventuell anderen Möglichkeiten zu probieren...
    Ich habe auch versucht die Programmzeilen in denen die Ordnerabfrage durchgeführt wird auszukommentieren. Aber es ruckelt weiterhin (hat sich da irgendetwas im Hintergrund "initialisiert"
    Wenn ich auf älteren Programcode zurückgreif dann habe ich den Fehler quasi ab dem Zeitpunkt wenn ich es einmal debugge - also einmal nach dem Server abfrage und diesen dann ausschalte.

    Problem habe ich so nicht kommen sehen ^^
    Eine kurze Rückmeldung wie ich das beheben kann ( GetDriveInfo ? ) wäre echt spitze und würde mich definitiv weiterbringen. :D

    Viele Grüße.

    Knally
    Habe zwischenzeitlich eine Abfrage mittels ".IsReady" getestet.

    Visual Basic-Quellcode

    1. Public Function NAS_bereit (ByVal sDrive as String) as Boolean
    2. Try
    3. Dim NASDrive as New System.IO.DriveInfo(sDrive)
    4. Return NASDrive.IsReady
    5. Catch ex as exception
    6. Return False
    7. End Try
    8. End Function
    9. 'Aufruf
    10. if NAS_bereit(pathNAS) = True Then
    11. NAS_online = True
    12. else
    13. NAS_online = False
    14. end if



    Aber hier habe ich immer ein False obwohl der Server an ist und ich ihn über Windows Explorer erreichen kann...

    Gruß Knally
    @Knally Du hast diesen Thread mit VB6 überschrieben.
    Falls Du in VB.NET programmierst, benenne das schnell um, da wird Dir besser geholfen.
    [Allgemein] VB.NET, VB6, VBA, VBS — Mit welcher Sprache programmiere ich eigentlich?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Habe eine weitere Abfragemöglichkeit ausprobiert die jetzt scheinbar für's erste mal das tut was sie soll:

    Try
    Dim objFSO = CreateObject("Scripting.FileSystemObject")
    If ObjFSO.FolderExists(pathNAS) then
    ...


    Wenn das nicht irgendwelche Dämonen beschwören sollte bleibe ich mal dabei - bin für Tipps aber weiterhin offen.
    @Rod merci für die Info, habe den Thread umbenannt.

    Gruß

    Knally
    Problem ist wieder aufgetaucht, nachdem ich den NAS Server ausgeschaltet hatte und einen Tag später die Entwicklungsumgebung und das Programm wieder aufhatte.
    Wird hier in der IDE etwas angelegt, was dieses Netzwerk permanent abfrägt (oder irgendwelche Kopien des Netzlaufwerks wenn dieses Offline ist).
    Jemand eine Idee ? Verwende eine etwas ältere IDE (Visual Basic Express 2010). NAS Server ist ein Synology DS 720+ ?(

    Grüße Knally ^^
    Habe das Netzlaufwerk mal wie in
    vb-paradise.de/index.php/Threa…rk-verbinden-und-trennen/
    eingebunden. Kann es also verbinden und trennen (Laufwerksbuchstabe vergeben usw.)
    Dabei ist mir aufgefallen: Wenn ich den Server erste trenne bevor ich diesen ausschalte ( also kein Laufwerksbuchstabe mehr im Windows-Explorer) dann habe ich keine Ruckler.
    Dummerweise kann ich auch nicht trennen nach dem Server Offline ist ( Fehlermeldung) und ich weiß ja auch nicht den Zeitpunkt bei dem der Server "ausfällt" um die Verbidung schnell im Vorhinein zu removen.

    Jemand eine Idee wie ich die scheinbare Abfrage des Netzwerkzustands "im Hintergrund" deaktivieren kann oder welche Lösung da eventuell möglich wäre ?
    Nur weil der Server Offline ist soll ja nicht mein VB-Programm und auch nicht meine Entwicklungumgebung lahmgelegt werden 8o

    Grüße Knally ^^
    Hallo erneut :)

    Ich habe mein Problem zumindest teilweise lösen können...
    Also Problem war wenn mein Programm und meine IDE läuft und ich plötzlich die Verbindung zum NAS Server trenne (simulierter Ausfall des NAS Servers 8o )
    Dann fängt mein Programm an zu ruckeln. Und nicht nur die ausgeführte EXE sondern auch die IDE an sich...

    Dummerweise lässt sich das Netzlaufwerk auch nicht ordnungsgemäß removen mit RemoveNetworkDrive... (das gemappte Laufwerk wird weiterhin im Windows Explorer angezeigt (nur dann eben rotes Symbol statt grün). Ich vermute mal wenn ich das "Mapping" auch nach Ausfall des Netzlaufwerks sachgemäß entfernen kann dann würde auch mein Programm ohne Ruckler und die IDE weiterhin funktionieren...

    Jetzt ist mir dass zumindest teilweise gelungen, da ich "nicht mehr abfrage" sobald im PRG festgestellt wird dass die "Verbindung einen Fehler hat" also dass der von mir angelegte Netzwerkpfad einmalig nicht mehr gefunden wird. ("Drive.IsReady = False")
    Interessanterweise habe ich dann ENTWEDER einen Absturz des Programms oder es fängt sich nach 20 Sekunden und läuft stabil und wie gehabt weiter..... Das würde ich natürlich gerne etwas geschmeidiger programmtechnisch lösen ...

    Ich teile hier mal die Grobfassung meines Codes.
    Eine kleine Hilfestellung käme mir sehr gelegen :)



    Quellcode

    1. Imports System.IO
    2. Imports System.Net
    3. Imports System.Runtime.InteropServices
    4. Public Class Netzlaufwerk_Test
    5. Public NAS_online As Boolean
    6. Public NAS_starten As Boolean
    7. Public NAS_Error_festgestellt As Boolean
    8. Public NAS_auf_lokLaufwerk_schreiben As Boolean
    9. Public pathNAS_dr As String
    10. Public Sub NAS_verbinden_bei_Visu_Start()
    11. 'RW NAS Server automatisch connecten... nur einmal und auch nur dann wenn Laufwerk nicht schon gemappt ist..
    12. If NAS_Error_festgestellt = False Then
    13. Try
    14. Dim NASINFO = My.Computer.FileSystem.GetDriveInfo(pathNAS_dr)
    15. If NASINFO.IsReady = False Then
    16. 'If connected = True Then
    17. If NAS_starten = True Then
    18. Try
    19. NetworkDrive.MapNetworkDrive("\\10.10.103.99\arisar-data", "R"c, False, "Refracta", "Ari1234!")
    20. Catch ex As Exception
    21. MessageBox.Show("The network drive could not be mapped for the following reason: " & ex.Message)
    22. End Try
    23. NAS_starten = False
    24. End If
    25. 'End If
    26. End If
    27. Catch
    28. End Try
    29. End If
    30. End Sub
    31. Public Sub NAS_online_abfrage()
    32. If NAS_Error_festgestellt = False Then
    33. Try
    34. Dim NASINFO = My.Computer.FileSystem.GetDriveInfo(pathNAS_dr) '"R:"
    35. If NASINFO.IsReady = True And NAS_auf_lokLaufwerk_schreiben = False Then
    36. NAS_online = True
    37. NAS_starten = False
    38. Else
    39. NAS_online = False
    40. NAS_Error_festgestellt = True
    41. NAS_auf_lokLaufwerk_schreiben = True
    42. End If
    43. Catch
    44. End Try
    45. End If
    46. End Sub
    47. Private Sub Netzlaufwerk_Test_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    48. NAS_starten = True
    49. NAS_verbinden_bei_Visu_Start() 'einmalig beim Start
    50. End Sub
    51. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    52. NAS_online_abfrage()
    53. If NAS_online = True Then
    54. Label1.BackColor = Color.LimeGreen
    55. Else
    56. Label1.BackColor = Color.Silver
    57. End If
    58. If NAS_Error_festgestellt = True Then
    59. Label2.BackColor = Color.LimeGreen
    60. Else
    61. Label2.BackColor = Color.Silver
    62. End If
    63. End Sub
    64. End Class


    Grüße Knally ^^

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Knally“ ()