AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Welches Programm ist wo geöffnet?

Ein Thema von Mazen · begonnen am 6. Nov 2012 · letzter Beitrag vom 7. Nov 2012
Antwort Antwort
Seite 1 von 2  1 2      
Mazen

Registriert seit: 6. Okt 2011
66 Beiträge
 
Delphi 7 Professional
 
#1

AW: Welches Programm ist wo geöffnet?

  Alt 6. Nov 2012, 09:48
Tipp: Geöffnete Dateien (EXE/DLL) kann man dennoch umbenennen und an deren Stellen die neuen Dateien hinkopieren.
Bei den geöffneten Programmen bleiben aber dennoch die alten Dateiversionen geladen.
Das wusste ich gar nicht das das geht. Habe jetzt die alte Datei in "Datei2.exe" umbenannt und die neue Datei "Datei.exe" eingefügt. Das heißt die laufenden Programm laufen natürlich auf der alten Verson weiter. Beim nächsten Start wird dann aber logischerweise die neue Datei geladen!?

Du könntest du aber auf dem Server eine Serveranwendung laufen lassen, wo sich alle Programme anmelden.
Da siehst du, wer wo da ist (du kannst die Programme ja nach Programmverzeichnis, Computer-/Benutzernamen und IP befragen) und den Programmen dauch sagen "fahr runter oder starte dich (z.B. in x Minuten) neu".
(Letzteres zusammen mit einer kleinen Hilfsanwendung, oder mit Hilfe der Windows-Aufgabenplanung)
Eigentlich wäre mein Problem mit deinem Ansatz oben ja fast schon gelöst. Nur wäre so eine Serveranwendung schon echt komfortabel. Z.b. um Nachrichten an alle (Broadcast) oder nur an bestimmte Nutzer zu senden. Nur leider hab ich da noch keine wirkliche Idee.
Wie können denn 2 Delphi-Programm untereinander kommunizieren um sich beispielsweise an- oder abzumelden? Oder wie kann ich Nachrichten aus der Serveranwednung an die Clients senden?

Müsste das alles über "dritte Dateien" laufen die das eine Programm schreibt und das andere permanent überwacht und ausliest?


Na wenn das Delphi Programme sind, würde Ich diese Programme um eine Verbindung zu einer Server-App erweitern.

Die Server-App zeigt dir an, welche PC-Namen Verbunden sind und mit welcher Anwendung. Dann kannst du vielleicht noch über diese App eine Message auf den Delphi - Programmen ausgeben. ("Bitte schließen Sie die Anwendung" oder direkt killen (nein mach das besser nicht)

In der ServerApp kannst du vielleicht noch einstellen das bestimmte Programme direkt beim öffnen wieder geschlossen werden sollen, solange ein öffnen verboten ist. (vllt mit Nachricht an den Benutzer)

Naja und wenn dann von einem Delphi Programm keine Verbindungen mehr ausgehen kannst du das Update machen.

Meine Gedanken dazu...
Wie oben gesagt find ich die Idee sehr gut, und ich würd sicher auch Spaß am entwickeln finden.
Nur fehlen mir dazu ein paar Grundlagen was die Kommunikation zwischen Applikationen angeht. Ich denke ich werd mich dazu mal etwas belesen.
Über direkte Hilfe, vielleicht mit verweisen auf entsprechende Seiten wo ich Informationen bekomme, würd ich mich aber auch nicht beklagen
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.222 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Welches Programm ist wo geöffnet?

  Alt 6. Nov 2012, 09:53
Tipp: Geöffnete Dateien (EXE/DLL) kann man dennoch umbenennen und an deren Stellen die neuen Dateien hinkopieren.
Bei den geöffneten Programmen bleiben aber dennoch die alten Dateiversionen geladen.
Das wusste ich gar nicht das das geht.
Darauf sollte man sich nicht verlassen. Das ging einige Jahre mal nicht. Wobei das Verhalten z.B. durch Virenscanner blockiert werden könnte.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.372 Beiträge
 
Delphi 12 Athens
 
#3

AW: Welches Programm ist wo geöffnet?

  Alt 6. Nov 2012, 10:05
Aktuell geht das für alle Dateien, welche nicht per "Dateihandle" (CreateFile, also AssignFile, TFileStream und Co.) geöffnet sind.
EXE/DLL/BPL werden quasi per LoadLibrary als MMF geladen und dort läßt es sich umbenennen.
Abgesehn davon, wenn sich Fremdprogramme ala Virenscanner einmischen, oder wenn ein OS glaubt es sei intelligent. z.B. wenn man das Programm "nochmals" läd und das OS denkt "ahh, da ist die Datei ja schon geladen, also verwende ich sie jetzt gleich nochmal", anstatt sich die aktuelle Dateiversion zu holen, aber so intelligent ist Windows nicht.

Aber wenn's geht:
Ja, dann laufen die alten Programme weiter und beim Neustart werden dann die neuen Dateiversionen verwendet.


Aktuell = WinNT-Reihe (mindestens WinXP, Win7, Win8, Server2003, Server2008, Server2011 und Server2012)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Welches Programm ist wo geöffnet?

  Alt 6. Nov 2012, 10:12
Es geht auch mit Bordmitteln, die Windows bereitstellt:

Um herauszufinden wo überall das Programm läuft kannst du auch mit MSDN-Library durchsuchenCreateFile eine Datei erzeugen, die automatisch beim Beenden (bzw. wenn du das Handle loslässt, was beim Beenden automatisch passiert) gelöscht wird
Code:
FILE_FLAG_DELETE_ON_CLOSE
Dieses funktioniert auch dann, wenn die Anwendung abstürzt.

Jede Programminstanz sollte natürlich logischerweise einen anderen Dateinamen benutzen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.372 Beiträge
 
Delphi 12 Athens
 
#5

AW: Welches Programm ist wo geöffnet?

  Alt 6. Nov 2012, 10:14
@FILE_FLAG_DELETE_ON_CLOSE: Das funktioniert leider nicht über alle Arten der Netzwerkfreigaben, da das Transportprotokoll dieses explizit unterstützen muß.

Lokal ist das aber eine geile Sache, vorallem für temporäre Dateien, welche auch im Falle eines Programmabsturzes ordentlich entfernt würden.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Mazen

Registriert seit: 6. Okt 2011
66 Beiträge
 
Delphi 7 Professional
 
#6

AW: Welches Programm ist wo geöffnet?

  Alt 6. Nov 2012, 10:06
Grad eben konnte ich sie unbennen (das Programm war definitiv in Benutzung) und jetzt gehts nicht mehr Wieder die Meldung das das Programm in Benutzung sei.
Also wäre so eine Serveranwednung wohl doch auch von Nöten.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.372 Beiträge
 
Delphi 12 Athens
 
#7

AW: Welches Programm ist wo geöffnet?

  Alt 6. Nov 2012, 10:12
Man kann auch die Dateiverbindungen, jene über die Netzwerkfreigaben, in der genannten Systemsteuerung trennen.

Man darf sich dann nur nicht wundern, wenn die geöffneten Programme komisch reagieren sollten ... das ist so, als wenn man lokal, via FileUnlocker, einfach so die Dateihandle in fremden Anwendungen schließt, aber die Anwendungen selber erstmal nicht erfahren, daß ihnen jetzt der Dateizugriff fehlt ... bis sie dann mal wieder drauf zugreifen wollen und es knallt.



Der Server hat aber den Vorteil, daß man die Programme eben geziehlt informieren und ordnungsgemäß runterfahren/neu starten kann. (praktischer, da sie dann erstmal ihr Aufgaben ordentlich beenden können, vorallem wenn ein Bentuzer davor sitzt)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.682 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Welches Programm ist wo geöffnet?

  Alt 6. Nov 2012, 10:14
Also ich erstelle für jede laufende EXE eine Datei im zentralen Verzeichnis, da sieht man gut, was wer wo am laufen hat.

Die nächste Stufe mit Nachrichten verschicken vom Update-Prozess an alle Clients, das sie sich mal beenden sollen, ist natürlich genial.

Allerdings müssten dann auch die Zustände in den Clients überprüft werden und ggf der Benutzer zurückgefragt werden. Weil einfach mal den Prozess killen ist ja nicht die LÖsung.

Delphi-Quellcode:
  
initialization

AppHandle := CreateFile(PChar(SYS.TmpDir+ MakeFileNameFromTimeReadableCompact(GetLocalComputerName+'_'+GetLocalUserName +'_'+ ExtractFileName(Application.ExeName)+'_','','APP',true)), GENERIC_READ or GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_FLAG_DELETE_ON_CLOSE or FILE_ATTRIBUTE_TEMPORARY, 0);
  if AppHandle = INVALID_HANDLE_VALUE then
    AppHandle := 0;

finalization

  if (AppHandle <> INVALID_HANDLE_VALUE) and (AppHandle <> 0) then
    CloseHandle(AppHandle);
Sven Harazim
--
  Mit Zitat antworten Zitat
Mazen

Registriert seit: 6. Okt 2011
66 Beiträge
 
Delphi 7 Professional
 
#9

AW: Welches Programm ist wo geöffnet?

  Alt 6. Nov 2012, 10:26
Welche uses muss ich für "MakeFileNameFromTimeReadableCompact", "GetLocalComputerName" und "GetLocalUserName" implementieren?
Oder sind das Funktionen welche du dir selbst gestrickt hast?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.372 Beiträge
 
Delphi 12 Athens
 
#10

AW: Welches Programm ist wo geöffnet?

  Alt 6. Nov 2012, 10:30
Wir haben in unserem Apps eine Funktion drin "beende Clienten" und "starte Clienten neu".
Jeweils mit Zeitangabe.

Die Benutzer sehen dann einen Dialog mit Timeout "Programm muß neu beendet/gestartet werden" ... 10 ... 9 ... 8 ...
(natürlich mit mindestens einer Minute)

Bei Neustart starten die Anwendungen dann, nach ablauf des Timeouts, eine billige Autostart.exe, mit ihrem Programmpfad als Startparameter (ParamStr(0) + Parameter "-autostart" + Verzögerungszeit) und beenden sich selber.

Die autostart.exe (die darf beim Update nicht angetastet/verändert werden, und wenn doch, dann bevor die Neustart initiiert wird) wartet dann etwas und startet die Clienten wieder.
(wichtig für die BDEs, wo nicht immer wer davor steht und vorallem da wo kein Benutzer von irgendwas eine Ahnung hat )


[edit]
MakeFileNameFromTimeReadableCompact ist bestimmt eine "selbsgeschriebene" Funktion.

Und ddas andere: Windows? oder siehe erstmal im MSDN, in welcher Headerdatei das definiert ist.
Bzw. über Strg+Shift+F in deinen Delphi-Sourcen danach suchen
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 6. Nov 2012 um 10:33 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz