Programm auf Netzlaufwerk vor Absturz bei Netzwerkproblemen schützen?

  • Allgemein

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Deathmean.

    Programm auf Netzlaufwerk vor Absturz bei Netzwerkproblemen schützen?

    Hallo zusammen,
    ich recherchiere seit längerem zu dem im Titel beschriebenen Problem, aber kann leider keine Lösung finden.

    Folgendes Szenario:
    Mein Programm (.Net) (und dessen DLLs) liegt auf einem Netzlaufwerk, auf welches viele Leute Zugriff haben.
    Dies hat meiner Meinung nach viele Vorteile:
    Mann muss die Installation nur einmal machen, Updates gehen schnell, es ist sicher das alle die gleichen globalen Einstellungen haben, usw..

    Wenn jetzt aber kurz das Netzlaufwerk nicht erreichbar ist (zum Beispiel wenn man über WLAN im Firmennetz ist oder der Rechner in den Ruhemodus geht) stürzt bei der nächsten Benutzung das Programmes zu 99% ab.

    Gibt es hier eventuell irgendwelche Möglichkeiten dies zu vermeiden?
    Vor langer Zeit hat mir ein Kollege mal erzählt das er bei Delphi irgendeine Windows-Option setzen kann damit das Programm beim Start komplett in den Ram geladen wird und so die Verbindung nicht mehr benötigt. Sagt das jemanden was?

    Bin sehr gespannt auf eure Antworten, vielen Dank im voraus :)
    Programm über das Netzlaufwerk auszuführen kann schwere Performance Probleme verursachen... Bei kleinen Programmen aber meist nicht so tragisch. Würde es trotzdem nicht machen aus den von dir benannten Gründen. Lösung hab ich hier leider keine für dich, bin aber gespannt was hier als Lösung vorgeschlagen wird.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Wie passend, dass ich gerade genau diese Situation nachspielen kann. Letztenendes kommt es drauf an, was Dein Programm macht. Wenn es nur so vor sich hindümpelt, ist es im RAM und arbeitet auch normal, auch wenn nach Start die (W)LAN-Verbindung abbricht. Ok, ob es Dein Programm macht, wage ich aufgrund des Threads zu bezweifeln, aber einige meiner simpleren Programm (re)agieren so. Wenn es irgendwelche Daten aus dem Netzwerk braucht, wird Mus draus. Aber dann brächte es Dir noch nicht mal was, wenn das Programm sonst einwandfrei läuft. Letztenendes stolpert es nur bei Kommunikationsprozessen. Und es ist Deine Aufgabe, die zu identifizieren. Du könntest dann auch alle Netzwerk-Exceptions generell abfangen und versuchen, diese sinnvoll zu behandeln. Zumindest das abfangen geht an einer zentralen Stelle in den ApplicationEvents.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Bluespide schrieb:

    Das Problem hatten wir auch mal. Unsere Lösung: Einen Loader, der erstellt beim starten eine Shadow Copy aller Referenzen im Temp Ordner. Das Programm läuft dann also auf jeden Fall auch mit Netzwerkabbrüche. .Net ShadowCopy


    VIELEN VIELEN DANK :thumbsup:

    Das funktioniert super gut hab jetzt alles durch getestet und bin mehr als zufrieden.

    Ich hab das einfach bei meinem Start Thread ganz an den Anfang wie folgt gesetzt und es geht super :)

    VB.NET-Quellcode

    1. <LoaderOptimization(LoaderOptimization.MultiDomainHost)>
    2. <STAThread>
    3. Public Sub Main()
    4. Dim currentDomain As AppDomain = AppDomain.CurrentDomain
    5. If currentDomain.ShadowCopyFiles = False Then
    6. LoadLocal()
    7. Exit Sub
    8. End If
    9. Application.Run(MainForm)
    10. End Sub
    11. Private Sub LoadLocal()
    12. ' Enable shadow copying
    13. ' Get the startup path. Both assemblies (Loader and
    14. ' MyApplication) reside in the same directory:
    15. Dim startupPath As String = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)
    16. 'Dim configFile As String = Path.Combine(startupPath, "MeinProgramm.exe.config")
    17. Dim assembly As String = Path.Combine(startupPath, "MeinProgramm.exe")
    18. ' Create the setup for the new domain:
    19. Dim setup As New AppDomainSetup()
    20. setup.ApplicationName = "MeinProgramm"
    21. setup.ShadowCopyFiles = "true"
    22. ' note: it isn't a bool
    23. 'setup.ConfigurationFile = configFile
    24. ' Create the application domain. The evidence of this
    25. ' running assembly is used for the new domain:
    26. Dim domain As AppDomain = AppDomain.CreateDomain("MeinProgramm", AppDomain.CurrentDomain.Evidence, setup)
    27. ' Start MyApplication by executing the assembly:
    28. domain.ExecuteAssembly(assembly)
    29. ' After the MyApplication has finished clean up:
    30. 'Try
    31. ' AppDomain.Unload(domain)
    32. 'Catch ex As Exception
    33. 'End Try
    34. End Sub