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 3 von 3     123   
Benutzerbild von Sir Rufo
Sir Rufo

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

AW: Welches Programm ist wo geöffnet?

  Alt 6. Nov 2012, 12:50
Jo, und wenn das Programm mehrfach von dem Benutzer an dem Rechner gestartet wird, dann klappert das so nicht.

Dein Aufruf müsste dann wie folgt sein:

CreateFile( PChar( FFileName ), GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_ALWAYS, FILE_FLAG_DELETE_ON_CLOSE, 0 );
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
Mazen

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

AW: Welches Programm ist wo geöffnet?

  Alt 6. Nov 2012, 12:54
Das das Programm an einem Rechner mehrmals gestartet werden kann hab ich schon mit Hilfe von "CreateMutex" unterbunden
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

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

AW: Welches Programm ist wo geöffnet?

  Alt 6. Nov 2012, 12:56
Jo, und wenn das Programm mehrfach von dem Benutzer an dem Rechner gestartet wird, dann klappert das so nicht.

Dein Aufruf müsste dann wie folgt sein:

CreateFile( PChar( FFileName ), GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_ALWAYS, FILE_FLAG_DELETE_ON_CLOSE, 0 );
Doch, das klappt, da die aktuelle Zeit im Dateinamen enthalten ist. Und auf die genaue Millisekunde bekommt das kein Benutzer doppelt hin.
Sven Harazim
--
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Welches Programm ist wo geöffnet?

  Alt 6. Nov 2012, 15:03
Jo, und wenn das Programm mehrfach von dem Benutzer an dem Rechner gestartet wird, dann klappert das so nicht.
Es sei dem einem reicht es zu wissen, daß "mindestens" ein Programm an dieser Stelle gestartet ist.

Wird das letzte Programm beendet, dann wird auch automatisch die Datei gelöscht.

FILE_FLAG_DELETE_ON_CLOSE bezieht sich nur auf das erste FileHandle, über welches die Datei erstellt wurde. (danach sollte es IMHO keine Wirkung mehr haben)
Und es zeigt erst seine Wirkung, nachdem kein Handle mehr auf die Datei zeigt (egal wem diese Handles gehörten).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

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

AW: Welches Programm ist wo geöffnet?

  Alt 6. Nov 2012, 15:17
Na da hab ich mal wieder was gelernt
Sven Harazim
--
  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
 
#26

AW: Welches Programm ist wo geöffnet?

  Alt 6. Nov 2012, 15:18
Jo, und wenn das Programm mehrfach von dem Benutzer an dem Rechner gestartet wird, dann klappert das so nicht.
Es sei dem einem reicht es zu wissen, daß "mindestens" ein Programm an dieser Stelle gestartet ist.

Wird das letzte Programm beendet, dann wird auch automatisch die Datei gelöscht.

FILE_FLAG_DELETE_ON_CLOSE bezieht sich nur auf das erste FileHandle, über welches die Datei erstellt wurde. (danach sollte es IMHO keine Wirkung mehr haben)
Und es zeigt erst seine Wirkung, nachdem kein Handle mehr auf die Datei zeigt (egal wem diese Handles gehörten).
Nu joar ... das ist alles nicht so wie gedacht ...

Man kann solange ein Handle auf diese Datei bekommen, bis der erste das Handle (mit Flag FILE_FLAG_DELETE_ON_CLOSE) schließt.
Ab diesem Zeitpunkt hat die Datei den Status "Sobald mich keiner mehr sieht, verdufte ich" und jeder Versuch ein Handle auf diese Datei zu bekommen führt zu einem INVALID_HANDLE_VALUE.

Also muss jede Instanz seine eigene Datei verwalten.
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 stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#27

AW: Welches Programm ist wo geöffnet?

  Alt 6. Nov 2012, 20:00
Die Idee mit den Files ist nicht schlecht!

Ich habe mal in einer DB-Anwendung infach eine Log-Tabelle eingeführt, in der sich die Clients eintragen und zyklisch einen Zeitstempel aktualisieren (dadurch fallen auch "veraltete" Einträge auf).
Beim Schließen tragen sich die Client natürlich aus.

Um einen Wartungsmodus einzustellen erzeuge ich eine ReadOnly.txt bei der Exe (da steht drin, dass die Programmdaten nur noch gelesen werden können).
In einem Timer wird auf die Existenz der Datei geprüft und dann die Txt angezeigt, die Tabellen auf ReadOnly gesetzt und die Form eingefärbt.
Als zweite Möglichkeit wird eine KillAll.txt erzeugt, worauf sich alle Programme beenden (außer meins im AdminModus).

Ist nicht wirklich genial, funktioniert aber ganz zuverlässig.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
WM_CLOSE

Registriert seit: 12. Mai 2010
Ort: königsbronn
398 Beiträge
 
RAD-Studio 2009 Pro
 
#28

AW: Welches Programm ist wo geöffnet?

  Alt 6. Nov 2012, 22:31
Schreib einen Launcher, der aus einem Ordner jeweils die neueste Version der Software startet.

Laufende Programme werden nicht beachtet.
Irgendwann wird der Nutzer das Programm beenden und wenn er es beim nächten mal startet, startet der Launcher das geupdatete Programm.

Oder wenn du das auch verhindern willst, lausche mit Indy auf einem beliebigen freigegbenen Port und warte darauf, dass jemand (du) eine Anfrage "Update" sendet. Sobald die Anfrage eintrifft, öffne eine MessageBox, die dem Nutzer sagt, dass er seine Anwendung gefälligst neuzustarten hat.
(der Vorschlag von Jonas Shinaniganz)
Delphi programming
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

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

AW: Welches Programm ist wo geöffnet?

  Alt 7. Nov 2012, 06:16
Um zu bestimmen, ob die lokale EXE ein Update benötigt, lesen wir vor jedem Start die Versionsnummer der zentralen Exe aus und vergleichen. Unterscheiden sie sich, ist ein Update nötig. In den Delphi-Einstellungen muss dazu das Häkchen gesetzt werden, das mit jedem Build die Versionsnummer automatisch erhöht wird.
Und auf ungleich prüfen, so können auch ältere Versionen wieder reaktiviert werden.

Ist also die Version unterschiedlich, wird vor dem Start die Exe in den lokalen Cache kopiert. Ist das nicht möglich, weil z.B. noch eine Instanz geöffnet ist, dann wird solange die neue Version vom Server direkt gestartet, bis wieder kopiert werden kann.
Sven Harazim
--
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 07:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz