Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Programm beenden über das Nertzwerk
Tossi65
myCSharp.de - Member



Dabei seit:
Beiträge: 79

Themenstarter:

Programm beenden über das Nertzwerk

beantworten | zitieren | melden

Guten Morgen Kollegen,
ich erstelle und arbeite mit einer Software, die zentral auf einem Server installiert ist und die Clients haben dorthin ein Link zur Exe. Sie starten also die Exe aus dem Link heraus.
Alles schick. Während des Starts tragen sich die Clients in einer Tabelle der Datenbank ein. Da wir global agieren und ich die Software warten muss, kommt es vor, das vor Ort niemand
zu erreichen , aber die Software auf irgendeinem Client gestartet ist. Folge: Ich kann die Dateien nicht tauschen. Wenn dieser Client RDP nicht zulässt, habe ich die A..karte.

Meine Frage: Die Clients stehen in einer Tabelle drin. Gibt es eine Möglichkeit per .Net die Programme über das Netzwerk zu beenden?
Die Datenbank ist eine MS SQL Datenbank.

Mfg Torsten
Danke Tossi
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3782
Herkunft: Frankfurt a.M.

beantworten | zitieren | melden

Hallo Torsten,

jetzt gibt es gleich Schimpfe dass die Exe auf einem Netzwerklaufwerk liegt ;-)

Ich mache das aber genauso und läuft seit vielen Jahren in vielen Firmen gut. Ab Windows 7 wird eine geöffnete Datei von Windows gesperrt, vorher konnte man sie einfach austauschen.

Das Problem habe ich auch dass Leute über VPN oder so das Programm gestartet haben und man es so nicht mit einer neuen Version überschreiben kann.

Ich mache das so : ich kopiere das Programm mehrmals auf das Netzwerklaufwerk und mein Hauptprogramm startet immer das Neueste. So kann ich alle nicht gesperrten ersetzen und mit dem Neustart steht die aktuelle Programmversion zur Verfügung.

Programm beenden könnte man nur wenn parallel ein anderen Programm läuft was es beendet. Was ist aber wenn gerade jemand am Arbeiten ist ?

Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
private Nachricht | Beiträge des Benutzers
Papst
myCSharp.de - Experte



Dabei seit:
Beiträge: 394
Herkunft: Kassel

beantworten | zitieren | melden

Da gibts sogar schon einen FAQ Artikel von...
[FAQ] Anwendung von Netzlaufwerk starten

Das Szenario schreit nach einer besseren Strategie zur Softwareverteilung.

Edit: Ups, erst den Thread lesesn, dann posten.
Dann wäre es wohl Zeit für einen solchen Artikel.
Der Punkt mit dem Netzlaufwerk ist - neben den Problemen, die du selber siehst - dass Netzlaufwerke prinzipiell als nicht vertrauenswürdig und das zurecht.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Papst am .
private Nachricht | Beiträge des Benutzers
Tossi65
myCSharp.de - Member



Dabei seit:
Beiträge: 79

Themenstarter:

beantworten | zitieren | melden

Ich weiß, das ist nicht die feine Art. Mit einer FireBird Datenbank und einem Eventalerter hatte ich das Problem über die Datenbank gelöst.
Aber MS SQL ist hier ein wenig steif.

Mal weiterforschen. Die Kollegen verstehen einfach nicht, die Anwendungen nach Feierabend zu beenden.
Danke Tossi
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2360

beantworten | zitieren | melden

Mal davon ab, dass ich es für eine schlechte Idee halte Anwendungen automatisch zu beenden, an denen gerade jemand arbeitet eventuell folgender Ansatz:

- In der Datenbank in einer meinetwegen "Config"-Tabelle ein Flag einführen: "Shutdown".

Die Anwendung muss dann zyklisch die Tabelle anfragen und auf das Flag prüfen. - Ist es "1" wird ein Hinweis in der Anwendung angezeigt, mit der Möglichkeit die Anwendung zu beenden. Bestätigt der Nutzer das nicht, läuft die Anwendung einfach weiter.

Haben alle Nutzer bestätigt und die Anwendung beendet, kannst du dein Update ausführen und das Flag wieder auf 0 setzen.

Schön ist die Lösung nicht, aber es ist neben der Lösung von BerndFfm, das einzige was mir einfällt was halbwegs i.O. erscheint.
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
Palladin007
myCSharp.de - Member

Avatar #avatar-4140.png


Dabei seit:
Beiträge: 1516
Herkunft: Düsseldorf

beantworten | zitieren | melden

Ich schließe mich dem an: Blöde Idee
Ihr baut euch nur Probleme, wie das dann aussieht, habe ich das letzte Jahr live und in Farbe bewundern dürfen/müssen.

Früher hatte ich eine Anwendung mit ClickOnce verteilt, klappt gut, hat bei uns aber aus irgendwelchen Gründen immer öfter für Probleme gesorgt, warum, das habe ich nie herausgefunden.
Stattdessen habe ich dann eine eigene Alternative basierend auf AutoUpdater.NET gebaut, da hatte ich dann auch mehr Möglichkeiten, was gerade für intern genutzte Anwendungen praktisch ist.

In beiden Fällen liegen die Versionen dann auf dem Server und die Clients laden sich dann immer den neusten Stand runter, geprüft wurde z.B. beim ersten Start des Tages
Bei ClickOnce konnte man dann auswählen, ob aktualisiert werden soll, was manche Mitarbeiter kategorisch abgelehnt haben.
Der Selbst-Bau war da flexibler, da konnte ich dann einstellen, ob's ein Pflicht-Update ist, oder nicht.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Palladin007 am .
private Nachricht | Beiträge des Benutzers
Stefan.Haegele
myCSharp.de - Member

Avatar #avatar-3068.jpg


Dabei seit:
Beiträge: 462
Herkunft: Untermeitingen

beantworten | zitieren | melden

Naja - es gibt da noch eine einfache Hardcore Lösung.... Einfach den Server neu starten auf dem die Netzwerkfreigabe ist. Nach dem Neustart hast du Zugriff - es sein denn ein User war schnell mit dem erneuten starten der Application.

Oder einfach über Computerverwaltung / Freigegebene Ordner / Geöffnete Dateien die Datei schließen...

ACHTUNG: Dieser Vorschlag ist nicht ganz ernst zu nehmen - technisch funktional, prakltisch Schwachsinn :-)
private Nachricht | Beiträge des Benutzers
JimStark
myCSharp.de - Member

Avatar #dOpLzh7hN1az1g0eGRc0.jpg


Dabei seit:
Beiträge: 293

beantworten | zitieren | melden

Mit WMI könnte es vielleicht auch möglich sein:
Query and kill a process on a remote computer using PowerShell and WMI
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16146

beantworten | zitieren | melden

Die Ursache des Problems ist, dass die Anwendung nicht ordentlich verteilt wird sondern über ein Netzwerklaufwerk, was so ziemlich die schlechteste Idee ist, die man in einem Windows-Unternehmensnetzwerk machen kann (auch wenns manche aus Faulheit/Bequemlichkeit machen, andere Gründe erkenne ich nicht).
Alles, wirklich alles, was man dafür braucht, existiert.
App management documentation - Configuration Manager

Warum in 1000 Jahren soll es nun eine gute Idee sein die Symptome und Seiteneffekte zu workarounden, die Aufwand kosten dann neue Probleme bringen werden?
Warum nicht einfach den grundlegenden Fehler, dass die Exe auf dem Netzwerklaufwerk liegt, beheben und die Anwendung einfach ordentlich, kontrolliet ausrollen?
Würde das Problem nachhaltig lösen.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers