PDA

Vollständige Version anzeigen : Updateproblem Netzwerk


Loom
13.09.2004, 08:57
In unserem Netzwerk ist das .Net-Anwendungsprogramm zentral auf einem Netzlaufwerk gespeichert.
(Tipp: Damit ein Programm überhaupt von einem Netzwerklaufwerk ausgeführt werden kann, muss auf jedem Rechner die .Net Sicherheitsrichtlinie angepasst werden:
- Systemsteuerung
- Verwaltung
- .Net Framework (Version) Configuration
- Arbeitsplatz / Laufzeitrichtlinie / Die Zonensichheitanpassen (im rechten Fenster)
- alle Benutzer / lokales Internet / Schieber auf volles Vertrauen / Fertig)

Die Speicherung auf dem Netzlaufwerk hat den Vorteil, dass ich Programmupdates nur einmal zentral aufspielen muss.

Aber das klappt nicht immer, denn die Datei ist oftmals noch gesperrt.
Manchmal haben User die Datei noch im Zugriff, aber manchmal ist wirklich niemand mehr drauf und trotzdem kann ich die Datei nicht Löschen/Umbennen/Überschreiben.

Letzteres kann entweder durch ein MS-Datei-Handlingsproblem entstehen (so die Infos von MS) oder der Garbage-Collector in .NET führt seine Aufgabe nicht richtig aus.

Da man die Systemprobleme wohl nicht so einfach beseitigen kann, suche ich nun eine Alternativlösung. Vorschläge:

- Anzeige aller Tasken, die eine Datei festhalten ==> Task beenden
- Setzen eine Attributes auf dem Fileserver, der ein Überschreiben erlaubt
- Installation von unterschiedlichen Versionen, die dynmisch aufgerufen werden (hat dafür eine Logik zur Hand?)
- Haupt-Programm als DLL speichern. Aber noch nicht ausprobiert, ob man die DLL überschreiben kann.

Hat einer eine gute Idee?

chrissy
13.09.2004, 10:21
Also ich mach das bei mir im Firmennetz anders rum.
Hab nen Program das regelmässig updates und änderungen erhält.
Jetzt leg ich einen Ordner im Netz an, auf dem die neusten Dateien sind.
Startet jemand das Programm bei sich lokal, wird als erstes von einem "update programm" geprüft ob die lokalen dateien die aktuellsten sind und wenn nicht dann überschreibt das tool die lokalen dateien und startet dannach die neuste version auf dem lokalen rechner.

Man könnte das ganze noch besser umsetzten, schau dir mal die MS umsetzung an :) (Die kann man fertig runterladen)

Updater Application Block for .NET (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/updater.asp)

http://msdn.microsoft.com/library/en-us/dnbda/html/f01appu01.gif

Loom
14.09.2004, 08:48
Es scheint ja tatsächlich ein grundlegendes Problem zu sein, ansonsten hätte sich MS ja nicht mit dem Updater beschäftigt.
Die Grundidee bei dieser Lösung ist ja, dass man für jedes Update ein neues Directory erstellt und der Anwender automatisch darauf zugreift.
Beim Uploader wird dies durch ein Kopieren auf die lokale Maschine erreicht.
Alternativ könnte man natürlich auch in das entsprechende Versions-Directory wechseln und dort das Programm starten.

Ich teste mal beide Versionen und berichte dann über den Ausgang.

Bis dahin vielen Dank und wer weitere Ideen hat, bitte melden!

Loom
15.09.2004, 11:10
Ich habe mich entschieden, das Problem mittels Directory-Zuweisung zu lösen.
Dazu öffnen die Anwender ein Basisprogramm, dass nichts anderes macht, als aus einer XML-Datei den Pfad und den Dateinamen zu lesen, das Programm aufzurufen und sich dann zu verabschieden






Imports System.io
Imports System.xml
...

Public ExterneAnwendung As New System.Diagnostics.Process

...


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Programm_Pfad As String
Dim Programm_Datei As String
Dim XML_Datei As String = "reports.xml"
Dim XML_Reader As New XmlTextReader(XML_Datei)

XML_Reader.WhitespaceHandling = WhitespaceHandling.Significant

Do While XML_Reader.Read()
If XML_Reader.NodeType = XmlNodeType.Element Then
Select Case XML_Reader.Name
Case "Programm_Pfad"
Programm_Pfad = XML_Reader.ReadString()
Case "Programm_Datei"
Programm_Datei = XML_Reader.ReadString()
End Select
End If
Loop
XML_Reader.Close()
ChDir(Programm_Pfad)
ExterneAnwendung.StartInfo.FileName = Programm_Datei
ExterneAnwendung.Start()
Me.Close()
End Sub



Der Testlauf hat wunderbar geklappt, alle haben die neue Version gefunden und keinerlei Beschwerden.

Ich frage mich noch, ob der Aufruf über eine ExterneAnwendung der optimale Weg ist. Gibt es Alternativen?