INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Laufende exe soll den Start einer anderen exe verhindern.



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

02.02.2017, 16:30
Beitrag #1

TpunktN Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 216
Registriert seit: Jul 2011

2021
2011
EN

70***
Deutschland
Laufende exe soll den Start einer anderen exe verhindern.
Servus LV'er und LV'erinnen,

an einer Anlage gibt es zwei Programme, eine Automatik und einen manuellen Betrieb. Beides .exe Programme die auf ein Delphin Messsystem zugreifen. Wenn jetzt beide Programme laufen, blockieren sie sich teils gegenseitig, z.Bsp.: Motorregelung oder Gerät lesen.

Im Forum habe ich jetzt schon einige Dinge gefunden: Shared Variable, diverse localhost, ..
Alles machbar, aber aufwendig und nicht unbedingt gegen Fehler abgesichert (Programmabsturz setzt den Wert nicht zurück)

Deswegen meine Suche nach einer einfachen Lösung, zB die Abfrage ob Programm xy läuft, oder gar eine integrierte Lösung in LabVIEW.

Meine Lösungsidee bis jetzt: Der Messkarte ein virtuellen Ausgang zu aktivieren, wenn eines der Programme startet und beim beenden zu deaktivieren. Beide Programme müssen beim Start diesen Ausgang lesen und sich evtl selbst beenden.
Was mir nicht gefällt, wenn das Programm nicht richtig beendet wird, bleibt der Wert und ich benötige eine Art Reset.

Hätte ich in der such und schreibzeit statdessen programmiert, währe ich wohl fertig. Dafür habe ich gelernt GVs funktionieren nicht zwischen .exe Big Grin Big Grin

Justieren ist dem Gerät sagen was es anzeigen soll, kalibrieren ist die Kontrolle dieser Anzeige. Eichen ist ein längerer Prüfprozess und darf nur das Eichamt!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
02.02.2017, 16:58 (Dieser Beitrag wurde zuletzt bearbeitet: 02.02.2017 17:01 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.465
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Laufende exe soll den Start einer anderen exe verhindern.
Hallo T.N,

Zitat:Deswegen meine Suche nach einer einfachen Lösung, zB die Abfrage ob Programm xy läuft
Einfach mal den Taskmanager befragen, welche Programme gerade laufen und prüfen, ob die jeweils andere EXE im Speicher ist…
(Zum Abfragen des Taskmanagers einfach mal googlen, du findest Beispiel garantiert im NI-Forum und wahrscheinlich auch hier.)

Zitat:Dafür habe ich gelernt GVs funktionieren nicht zwischen .exe
Eine globale Variable funktioniert nur im Kontext der ausführenden EXE!
Wenn man zwischen zwei Programmen Daten austauschen will, verwendet man Netzwerkkommunikation aka SharedVariables…

Zitat:Alles machbar, aber aufwendig und nicht unbedingt gegen Fehler abgesichert (Programmabsturz setzt den Wert nicht zurück)
Ich sehe da einen Zielkonflikt zwischen den Anforderungen "nicht aufwendig" und "gegen Fehler abgesichert"! Big Grin
Und wenn ein Programm abstürzt, dann sollte im Hinblick auf weitere störungsfreie Kommunikation mit der Hardware vielleicht besser der PC neu gestartet werden!?

Alternative Idee: Deine EXE öffnen eine Datei auf dem PC exklusiv und schließen die Datei beim Beenden wieder. Der jeweils zweite erhält keinen Zugriff auf die Datei und muss sich sofort beenden. Zum Thema "Programmabsturz" siehe oben!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.02.2017, 17:56
Beitrag #3

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Laufende exe soll den Start einer anderen exe verhindern.
(02.02.2017 16:30 )TpunktN schrieb:  Meine Lösungsidee bis jetzt: Der Messkarte ein virtuellen Ausgang zu aktivieren, wenn eines der Programme startet und beim beenden zu deaktivieren. Beide Programme müssen beim Start diesen Ausgang lesen und sich evtl selbst beenden.
Was mir nicht gefällt, wenn das Programm nicht richtig beendet wird, bleibt der Wert und ich benötige eine Art Reset.
Auf der Messkarte, dann hast du wieder von 2 Programmen den Zugriff auf dieselbe HW, und gerade das macht dir doch die Probleme...

Dann vielleicht lieber eine Shared Variable. Und damit man sieht, dass was passiert, schreibst du dauernd (z.B. jede Sekunde) einen anderen Wert rein.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.02.2017, 19:25
Beitrag #4

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.689
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: Laufende exe soll den Start einer anderen exe verhindern.
Du kannst auch einen Mutex machen.

Du brauchst dafür CreateMutex(), GetLastError() (183: Mutex existiert) und ReleaseMutex() (288: Release verboten), alles drei in Kernel32.dll. Leider hab ich gerade kein Muster- VI vorliegen ...

Dieses Verfahren geht natürlich nur, wenn du die Programme, die sich gegenseitig verriegeln sollen, selbst erstellst. Woher solltest du sonst den Mutex-Namen kennen?

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.02.2017, 20:42
Beitrag #5

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.689
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: Laufende exe soll den Start einer anderen exe verhindern.
(02.02.2017 19:25 )IchSelbst schrieb:  Leider hab ich gerade kein Muster- VI vorliegen ...
Aber jetzt. LV2011.


Angehängte Datei(en)
0.0 .zip  Mutex.zip (Größe: 326,42 KB / Downloads: 281)

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.02.2017, 17:06
Beitrag #6

TpunktN Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 216
Registriert seit: Jul 2011

2021
2011
EN

70***
Deutschland
RE: Laufende exe soll den Start einer anderen exe verhindern.
Danke für die vielen Antworten.

(02.02.2017 16:58 )GerdW schrieb:  ...Einfach mal den Taskmanager befragen, welche Programme gerade laufen und prüfen, ob die jeweils andere EXE im Speicher ist…...
Die Programme sind offen, laufen aber nicht gleichzeitig, denke da unterscheidet der Taskmanager nicht. Unter Last schwanken sie zwischen 0 und 0,5% CPU Nutzung Big Grin
Zitat:Alternative Idee: Deine EXE öffnen eine Datei auf dem PC exklusiv und schließen die Datei beim Beenden wieder. Der jeweils zweite erhält keinen Zugriff auf die Datei und muss sich sofort beenden. Zum Thema "Programmabsturz" siehe oben!
Das sieht mir nach einer einfachen Lösung aus und ich weis wie man Dateien öffnet Big Grin

Shared Variables ist sicher besser, aber ich habe damit noch nicht gearbeitet, was wieder Zeit kostet die ich nicht habe. Sad

IchSelbst schrieb:Du kannst auch einen Mutex machen.
Klingt einfach, werde ich mir mal anschauen, für alle Programme habe ich den Quellcode Smile

Justieren ist dem Gerät sagen was es anzeigen soll, kalibrieren ist die Kontrolle dieser Anzeige. Eichen ist ein längerer Prüfprozess und darf nur das Eichamt!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.02.2017, 19:43
Beitrag #7

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: Laufende exe soll den Start einer anderen exe verhindern.
(02.02.2017 16:30 )TpunktN schrieb:  Servus LV'er und LV'erinnen,

an einer Anlage gibt es zwei Programme, eine Automatik und einen manuellen Betrieb. Beides .exe Programme die auf ein Delphin Messsystem zugreifen. Wenn jetzt beide Programme laufen, blockieren sie sich teils gegenseitig, z.Bsp.: Motorregelung oder Gerät lesen.

Im Forum habe ich jetzt schon einige Dinge gefunden: Shared Variable, diverse localhost, ..
Alles machbar, aber aufwendig und nicht unbedingt gegen Fehler abgesichert (Programmabsturz setzt den Wert nicht zurück)

Deswegen meine Suche nach einer einfachen Lösung, zB die Abfrage ob Programm xy läuft, oder gar eine integrierte Lösung in LabVIEW.

Meine Lösungsidee bis jetzt: Der Messkarte ein virtuellen Ausgang zu aktivieren, wenn eines der Programme startet und beim beenden zu deaktivieren. Beide Programme müssen beim Start diesen Ausgang lesen und sich evtl selbst beenden.
Was mir nicht gefällt, wenn das Programm nicht richtig beendet wird, bleibt der Wert und ich benötige eine Art Reset.

Hätte ich in der such und schreibzeit statdessen programmiert, währe ich wohl fertig. Dafür habe ich gelernt GVs funktionieren nicht zwischen .exe Big Grin Big Grin

Grundsätzlich ist die Idee mit einem Lock File gar nicht mal so schlecht. Jede Applikation probiert das File zu öffnen und setzt danach gleich die Sharingerlaubnis mit "Deny Access" so dass keine andere Applikation das noch öffnen darf. Danach lässt man das File offen bis man mit der Resource nichts mehr tun will und schliesst es dann. Wenn der Prozess abstürzt schliesst Windows das File automatisch und geht es doch noch gut.

Das folgende ist ziemlich rauh und würde ich so sicher nicht implementieren. Das Handling des Lockfiles würde ich in eine Intelligente Globale Variable verlegen mit den Methoden "Aquire Lock" und "Release Lock" für den Versuch das File zu öffnen (Acquire Lock) die den Status zurückgibt ob das auch gelungen ist und in dem Fall wird die FileRefnum im internen Shiftregister abgespeichert. Die zweite Method (Release Lock) schliesst die FileRefnum einfach.

   

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Installation unter Windows 10 verhindern tuhpon 2 7.510 17.09.2019 17:21
Letzter Beitrag: tuhpon
  mehrere Programminstanzen bei unterschiedlichen Benutzern verhindern Goldie 7 9.944 03.10.2014 12:47
Letzter Beitrag: rasta
  EXE macht was es will - am anderen Rechner gottfried 5 5.265 26.03.2010 16:05
Letzter Beitrag: gottfried
  exe mit einer anderen exe aufrufen stsc 3 6.606 12.11.2007 16:37
Letzter Beitrag: stsc
  Autostart der Applikation verhindern tron 15 16.867 04.07.2007 06:04
Letzter Beitrag: rolfk
  laufende VI's schließen jozeyhe 1 3.715 29.08.2006 13:19
Letzter Beitrag: Achim

Gehe zu: