AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Prüfen, ob EXE in Benutzung ist
Thema durchsuchen
Ansicht
Themen-Optionen

Prüfen, ob EXE in Benutzung ist

Ein Thema von Guido R. · begonnen am 17. Sep 2012 · letzter Beitrag vom 17. Sep 2012
Antwort Antwort
Benutzerbild von Guido R.
Guido R.

Registriert seit: 5. Jul 2007
141 Beiträge
 
Delphi 12 Athens
 
#1

Prüfen, ob EXE in Benutzung ist

  Alt 17. Sep 2012, 12:19
Hallo !

Folgende Situation :
Auf einem verbundenen Netzlaufwerk ('N:\') befindet sich eine EXE-Datei ('Programm.EXE'), die von mehreren PCs im Netzwerk aufgerufen werden kann (auch gleichzeitig). Nirgendwo wird festgehalten, wie viele PCs gerade diese Datei geöffnet haben. Nun soll von einem dieser verbundenen PCs das Programm aktualisiert werden und zwar mittels eines eigenen Programms ('Update.EXE').
Wie kann ich sicherstellen, dass keiner der anderen PCs die Programm.EXE noch geöffnet hat?

Die Lösungen mit IsFileInUse, die man hier im Forum finden kann, haben hier zu keinem akzeptablen Ergebnis geführt. Die scheinbar simple Lösung die Exe-Datei zu Löschen und bei Erfolg die neue EXE in das Verzeichnis zu kopieren hat unter Win7 ebenfalls versagt. Das Löschen scheint zu funktionieren, obwohl die EXE auf einem anderen PC genutzt wird, beim Schreiben kommt es aber zu Problemen.

Kennt noch jemand eine Methode festzustellen, ob die EXE in Benutzung ist?

Gruß
Guido R.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Prüfen, ob EXE in Benutzung ist

  Alt 17. Sep 2012, 12:24
Hallo,

da der Prozess der Applikation auf den entfernten Rechner läuft,
dürfte es sich schwierig gestalten herauszufinden von wem die Applikation noch geöffnet ist.

Alle Netzwerkrechner abfragen ist keine Möglichkeit?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: Prüfen, ob EXE in Benutzung ist

  Alt 17. Sep 2012, 12:25
Schreibe ein kleines Zusatzprogramm. Dieses wird von den Clients aufgerufen. Es kopiert dann die EXE vom Netzwerklaufwerk und startet dann die Kopie. So ist die Exe nie in Verwendung. Beim nächsten Neustart der Clients holen die sich die neue Exe.
Ggf. könntest Du es noch etwas intelligenter machen. Mach z.B. zusätlich zu der eigentlichen Exe eine kleine Textdatei, wo die Version der Netzwerk-Exe drin steht. Das Startprogramm vergleicht dann die Version aus der Textdatei mit der lokalen Kopie und kopiert die Exe nur, wenn die Netzwerk-Exe neuer ist. So muss nicht jedes Mal die EXE über das Netzwerk transportiert werden, sondern nur, wenn es ein Update gab.
Jens
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#4

AW: Prüfen, ob EXE in Benutzung ist

  Alt 17. Sep 2012, 12:34
Was hat der "Server" für ein Betriebssystem?
Unter Windows 7 kann man über die "Computerverwaltung > System > Freigegebene Ordner > Geöffnete Dateien" einen Überblick erhalten, welche Dateien von welchem Rechner geöffnet sind. Dort sollte eigentlich auch deine Exe-Datei drin stehen.
Wenn das so ist, müsste man mal herausfinden, wie Windows an diese Informationen gelangt.

Unter Windows Server 2008 R2 findest du diese Übersicht im "Server-Manager > Rollen > Dateidienste > Freigabe -und Speicherverwaltung > Geöffnete Dateien verwalten"
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Prüfen, ob EXE in Benutzung ist

  Alt 17. Sep 2012, 12:55
Server 2011 und eventuell auch in allen normalen Windowsen?
Compoterverwaltung \ System \ Freigegebene Ordner \ Geöffnete Dateien

Nja, darin stehen die Dateien, welche über's Netzwerk offen sind, aber der Server hat die Datei ja auch geöffnet, um sie überhaupt weiterreichen zu können und dieses ist dann genauso testbar, wie andere lokal geöffnete Dateien (Unlocker und Co.)

In Win7 gibt es doch auch eine neue API, welche man nach Programen fragen kann, die eine Datei offen hält.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Prüfen, ob EXE in Benutzung ist

  Alt 17. Sep 2012, 13:09
Also um zu erkennen ob der Prozess auf einer Remotekiste rennt könntest du z.B. Jwscl

Oder WMI nutzen

Oder hier nachgucken, siehe Luckies post

Oder das hier
  Mit Zitat antworten Zitat
Benutzerbild von Guido R.
Guido R.

Registriert seit: 5. Jul 2007
141 Beiträge
 
Delphi 12 Athens
 
#7

AW: Prüfen, ob EXE in Benutzung ist

  Alt 17. Sep 2012, 13:25
@Klaus
Das upzudatende Programm ist eine Clipper - Altlast
Dort etwas einzubauen, was auf eine IP-Anfrage reagiert ist ...
...aufwendig bis gewagt.

@Nersgatt
An sich eine sehr gute Idee. Jedoch wurde das Programm von jmd. geschrieben,
der von Programmierung eigentlich wenig Ahnung hatte. Pfade zu Datenbankdateien,
Berichtvorlagen etc. sind nicht unbedingt mit glob. Pfadvariablen verknüpft.
Also müsste man an hundterten Stellen eben diese einfügen. In CLIPPER
2. Problem : Es könnte zu Dateninkonsistenzen kommen, wenn zwei unterschiedliche
Programmversionen auf die gleiche Datenbank-Datei zugreifen.

@Morphie, Himitsu
Das sollte mit jeder Windows-Version ab XP laufen. In den meisten Fällen wird wohl kein "echter" Server zum Einsatz kommen, aber ausschließen kann ich das nicht. Die Sache mit den "geöffneten Dateien" klingt vielversprechend. Jetzt müsste ich "nur" noch wissen, wie ich diese mit Delphi abfragen kann.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Prüfen, ob EXE in Benutzung ist

  Alt 17. Sep 2012, 13:39
Nirgendwo wird festgehalten, wie viele PCs gerade diese Datei geöffnet haben.
Doch, wird es. Der Server von dem die Datei gestartet wird hat eine Verwaltungsliste welche Dateien von wem in Benutzung sind. Man kann auch über WinAPI wenn der Prozess die entsprechenden Admin-Rechte hat diese Liste abfragen.

Die scheinbar simple Lösung die Exe-Datei zu Löschen und bei Erfolg die neue EXE in das Verzeichnis zu kopieren hat unter Win7 ebenfalls versagt. Das Löschen scheint zu funktionieren, obwohl die EXE auf einem anderen PC genutzt wird, beim Schreiben kommt es aber zu Problemen.
Das Löschen funktioniert auch nicht. Nur der Windows-Explorer denkt das die Datei gelöscht wäre. Ein aktualisieren der Anzeige bringt die Exe wieder zum vorschein.

Aber umbennenen geht.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:13 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