37414
Goto Top

Benutzerzugriff auf ein Programm automatisch beenden

Hallo,

in einem anderen Thread (Servermanager mit Unterpfad per Script öffnen) hatte ich danach gefragt, wie man den Servermanager mit einem Unterpfad per Script öffnen kann.
Dazu wurde mir "AutoIT" empfohlen, wo ich im Editor "Scite" einen entsprechenden Code eingeben kann.

Das funktioniert soweit gut... jedoch wird das Fenster "Geöffnete Dateien verwalten" zwar geöffnet, wenn ich die Script-Verknüpfung neu auf den Desktop kopiere, aber seltsamer Weise nach ein paar Nutzungen nicht mehr. Den Link "Geöffnete Dateien verwalten" muss ich dann wieder manuell öffnen... hmmm... merkwürdig.


Aber darum geht es ja heute nicht face-wink

Mit dem oben beschriebenen Script kontrolliere ich, wer noch auf ein bestimmtes Programm zugreift.
Grund hierfür ist, dass ich eine Sicherung der Programm-Datenbanken nur dann machen kann, wenn niemand mehr auf dieses Programm (altes Delphi / Paradox) zugreift.

Nun haben wir das Problem, dass auch abends immer mal wieder jemand vergißt, sich aus dem Programm abzumelden und dann funktioniert die nächtliche Bandsicherung nicht und die Datenbanken werden nicht gesichert, was fatal sein kann!!!

Nun meine Frage:

Gäbe es eine Möglichkeit, z.B. durch ein Script (wie oben beschrieben mit AutoIT...) einfach kurz vor Beginn der nächtlichen Bandsicherung alle Benutzer, die noch auf die Programm-Datenbanken zugreifen raus zu kicken?
Ein Kollege meint, dass dies ggf. Probleme bei den Datenbanken verursachen könnte.

Würde mich über Eure Meinung - und natürlich auch über Tipps und/oder Lösungsvorschläge sehr freuen.

Danke und schöne Grüße,
imebro

Content-Key: 256465

Url: https://administrator.de/contentid/256465

Ausgedruckt am: 28.03.2024 um 09:03 Uhr

Mitglied: emeriks
emeriks 02.12.2014 aktualisiert um 09:05:14 Uhr
Goto Top
Hi,
Nun haben wir das Problem, dass auch abends immer mal wieder jemand vergißt, sich aus dem Programm abzumelden und dann funktioniert die nächtliche Bandsicherung nicht und die Datenbanken werden nicht gesichert, was fatal sein kann!!!
Also bleiben die Benutzer über nacht angemeldet? Am PC oder TS?
Was ist, wenn Du die Anmeldzeiten der Benutzer einschränkst und dann per GPO erzwingst, dass Benutzer nach Ablauf des erlaubten Zeitfensters zwangsweise abgemeldet werden? Wäre das bei Euch praktikabel?

Bzw. falls TS, die Leerlaufzeit-Limits setzen.
E.
Mitglied: 37414
37414 02.12.2014 um 09:07:46 Uhr
Goto Top
Hallo und danke für die schnelle Antwort.

Ja, das Programm läuft auf einem Terminal-Server.
Was bedeutet "die Leerlaufzeit-Limits setzen" jetzt genau?

Danke und Gruss,
imebro
Mitglied: 114757
114757 02.12.2014 um 09:12:00 Uhr
Goto Top
Zitat von @37414:
Ja, das Programm läuft auf einem Terminal-Server.
Was bedeutet "die Leerlaufzeit-Limits setzen" jetzt genau?
http://technet.microsoft.com/de-de/library/cc754272.aspx

Gruß jodel32
Mitglied: 37414
37414 02.12.2014 aktualisiert um 10:03:12 Uhr
Goto Top
Zunächst danke für den Link...

Bei uns ist das Problem jedoch ein wenig anders.
Oft schließen Mitarbeiter-/innen, die auf das Programm zugreifen, ihre Terminalserver-Verbindung (Remotedesktop-Sitzung) am Ende ihres Arbeitstages nur über das Kreuz rechts oben, wodurch der Zugriff auf das Programm noch bestehen bleibt.

Daher würde eine Warnung - 2 Min. vor der automatischen Trennung - also nichts bringen und der Zugriff auf die Programm-Datenbanken würde somit also automatisch beendet.

Hier wiederum wäre dann meine Frage, ob das den Datenbanken (Delphi / Paradox 5) ggf. schaden würde, wie es der Kollege befürchtet?

Wenn nicht, dann wäre dies eine gute Möglichkeit.
Schade, dass es offenbar ja nicht möglich ist, diese Datenbanken während der Nutzung zu sichern. Wahrscheinlich liegt das daran, dass es sich hier um eine recht alte Paradox-Version (5) handelt... (???)

Danke bis dahin und schöne Grüße,
imebro
Mitglied: emeriks
emeriks 02.12.2014 um 10:09:01 Uhr
Goto Top
Hi,
Hier wiederum wäre dann meine Frage, ob das den Datenbanken (Delphi / Paradox 5) ggf. schaden würde, wie es der Kollege befürchtet?
Das können wir hier unmöglich beantworten, wenn niemand hier genau das Programm kennt. Und was für eine Datenbank dahinter ist. Aber um es mal platt zu sagen: Wenn das Programm "gut" programmiert ist, dann gibt es da keine Probleme.
Wie sicherst Du überhaupt? Über VSS sollte es doch gehen. Moderne Backup-Programme arbeiten damit.

E.
Mitglied: colinardo
colinardo 02.12.2014 aktualisiert um 10:24:47 Uhr
Goto Top
Hallo imebro,
naja, du kannst auch ein AutoIT-Script hernehmen um ein Programm ordnungsgemäß zu schließen wenn es eine gewisse Zeit IDLE't. In folgendem Script wird der Prozess zwar abgeschossen, aber das kannst du ja durch die WinClose Funktion ersetzen damit es "ordentlich" heruntergefahren wird..
Programme die IDLEn beenden.

Grüße Uwe
Mitglied: 37414
37414 02.12.2014 aktualisiert um 10:48:33 Uhr
Goto Top
Zitat von @emeriks:

Hi,
> Hier wiederum wäre dann meine Frage, ob das den Datenbanken (Delphi / Paradox 5) ggf. schaden würde, wie es der
Kollege befürchtet?

Das können wir hier unmöglich beantworten, wenn niemand hier genau das Programm kennt. Und was für eine Datenbank
dahinter ist. Aber um es mal platt zu sagen: Wenn das Programm "gut" programmiert ist, dann gibt es da keine Probleme.
Wie sicherst Du überhaupt? Über VSS sollte es doch gehen. Moderne Backup-Programme arbeiten damit.

E.

Danke zunächst...
Aber was ist "VSS"?


@ "colinardo":

Das mit dem "ordentlich heruntergefahren" verstehe ich nicht so ganz - denn es muss ja lediglich ein Programm geschlossen werden... bzw. der Zugriff auf die Datenbanken dieses Programms muss beendet werden.

Habe mir den Link eben angeschaut.
Vor allem gefällt mir das AutoIT-Script...

Meine Frage ist jetzt, ob das Beenden durch dieses Auto-IT-Script dann im Grunde das Gleiche ist, als wenn ich das Programm über den Taskmanager beende... also damit einfach den Prozess der EXE-Datei des Programms beende?

Danke und LG
imebro
Mitglied: colinardo
colinardo 02.12.2014 aktualisiert um 10:49:43 Uhr
Goto Top
Zitat von @37414:
Danke zunächst...
Aber was ist "VSS"?
Volume Shadow Copy Service
Nur mit dem "ordentlich heruntergefahren" verstehe ich nicht so ganz - denn es muss ja lediglich ein Programm
geschlossen werden... bzw. der Zugriff auf die Datenbanken dieses Programms muss beendet werden.
Wo ist dein Problem ?, wenn man ein Programm ordentlich schließt, beenden die Programme auch in 99,9% der Fälle Ihre Datenbankverbindung ordnungsgemäß ...
Mitglied: 37414
37414 02.12.2014 aktualisiert um 10:50:57 Uhr
Goto Top
Danke nochmals...

Hier nochmal meine Frage, die ich eingetragen hatte, während Du geantwortet hattest:

Meine Frage ist jetzt, ob das Beenden durch dieses Auto-IT-Script dann im Grunde das Gleiche ist, als wenn ich das Programm über den Taskmanager beende... also damit einfach den Prozess der EXE-Datei des Programms beende?

Und - sind die Zahlen im Script Sekundenangaben (Zeile 5 + 7)?

Danke und Gruss,
imebro
Mitglied: colinardo
colinardo 02.12.2014 aktualisiert um 10:53:05 Uhr
Goto Top
Zitat von @37414:
Meine Frage ist jetzt, ob das Beenden durch dieses Auto-IT-Script dann im Grunde das Gleiche ist, als wenn ich das Programm
über den Taskmanager beende... also damit einfach den Prozess der EXE-Datei des Programms beende?
Im jetzigen Zustand ja, aber wie ich geschrieben habe lässt sich das "Killen" durch die WinClose-Funktion ersetzen, dann wird es so geschlossen als hätte der Benutzer es normal beendet !!

Und - sind die Zahlen im Script Sekundenangaben (Zeile 5 + 7)?
Ja, steht aber im Code darüber face-wink
Mitglied: 37414
37414 02.12.2014 um 10:54:03 Uhr
Goto Top
OK...
Sorry, dass ich nochmal nachfrage face-wink

Diese WinClose-Funktion muss also noch zusätzlich in das Auto-IT-Script aufgenommen werden oder meinst Du mit der Win-Close-Funktion die erste Variante mit Taskplaner und der kleinen Batch?

LG
imebro
Mitglied: colinardo
colinardo 02.12.2014 aktualisiert um 11:01:44 Uhr
Goto Top
Zitat von @37414:
Diese WinClose-Funktion muss also noch zusätzlich in das Auto-IT-Script aufgenommen werden oder meinst Du mit der
Win-Close-Funktion die erste Variante mit Taskplaner und der kleinen Batch?
Ich meine nur das AutoIt-Script, das andere war ja sowieso eine andere Methode (man beachte den fetten Strich face-smile) ...

https://www.autoitscript.com/autoit3/docs/functions/WinClose.htm
Mitglied: 37414
37414 02.12.2014 um 11:43:31 Uhr
Goto Top
OK, so langsam kommen wir der Sache näher.

Ich würde also quasi dieses AutoIT-Script von Deinem Link kopieren.
Dann die Zeilen 3, 5 und 7 anpassen.
Dann müßte ich die WinClose-Funktion noch zusätzlich in dieses AutoIT-Script schreiben... (??)
... wenn ja... wohin?

Am Ende würde dieses Script z.B. auf dem Terminal-Server-Desktop jedes Benutzers liegen und gestartet... oder per Task / per Dienst gestartet, damit es immer automatisch wieder läuft, auch wenn der Server mal neugestartet wurde.

Und dadurch würde dann nach der in Zeile 7 eingegebenen Zeit (z.B. 10800 für 3 Std.) automatisch das Programm "ordentlich & korrekt" beendet und auch die Remotedesktopsitzung der jeweiligen Benutzer würde korrekt beendet.

LG
imebro
Mitglied: colinardo
colinardo 02.12.2014 aktualisiert um 11:47:18 Uhr
Goto Top
Dann müßte ich die WinClose-Funktion noch zusätzlich in dieses AutoIT-Script schreiben... (??)
... wenn ja... wohin?
nicht zusätzlich sondern anstatt Zeile 16 ! Du willst den Prozess ja nicht abschießen ...
Bitte ab und zu auch mal die Doku zu AutoIt lesen face-wink
Mitglied: 37414
37414 02.12.2014 aktualisiert um 12:18:24 Uhr
Goto Top
OK... habe mich jetzt mal an dem Script versucht.

Hier wäre mein Script:

#NoTrayIcon
;Prozess der geschlossen werden soll
Const $PROCESS = "C:\Program Files\HB Datasystems\Antrag\antraege.exe"  
;Checkintervall
Const $INTERVALL = 300
; Zeit der Inaktivität(Sekunden) nach der der Prozess geschlossen wird
Const $IDLETIME = 10800

global $idle_time = TimerInit()
$oldPos = MouseGetPos()
While 1
	$nowPos = MouseGetPos()
	if $oldPos = $nowPos and $oldPos[1] = $nowPos[1] then
		if TimerDiff($idle_time) >= ($IDLETIME * 1000) then
			if ProcessExists($PROCESS) Then
				WinClose($PROCESS)
			EndIf
		Endif
	Else
		$idle_time = TimerInit()
		$oldPos = $nowPos
	EndIf
	Sleep($INTERVALL * 1000)
WEnd

In Zeile 3 habe ich den kompletten Programmpfad zur EXE-Datei angegeben.
In Zeile 5 den Intervall auf 5 Minuten erhöht.
In Zeile 7 die Zeit der Inaktivität auf 3 Stunden erhöht.
In Zeile 16 das "WinClose" eingesetzt... aber mit der "Process"-Angabe, da in Zeile 3 ja steht, was genau der Prozess sein soll.

Wäre das Script grds. OK so?
Und... ich müßte das jetzt bei jedem Benutzer auf dessen Terminal-Server installieren?
  • Start dann per Task / Dienst?

Kann das "Sleep..." in der vorletzten Zeile so bleiben?

Danke und Gruss
imebro
Mitglied: emeriks
emeriks 02.12.2014 aktualisiert um 12:21:17 Uhr
Goto Top
Mal an Rande: Schießen wir hier nicht mit Kanonen auf Spatzen?
Wenn Windows die TS getrennte Sitzung nach Ablauf des Limits automatisch schließt, dann wird zunächst auch ein sauberes WinClose ausgelöst. Nur wenn der Task dann innerhalb eines festgesetzten Timeouts nicht weg ist, z.B. weil dann so eine Message kommt wie "Sind Sie sicher, dass Sie das Programm beenden wollen?" oder "Möchten Sie den aktuellen Datensatz speichern?", dann wird der Task hart abgebrochen. Also doch im Grunde das Gleiche, was dann irgendwelche Scripte machen müssen.

VSS
Dabei wird auf dem Server, wo die DB legt, beim Backup das Filesystem sozusagen "eingefroren" (ein Schnappschuss erstellt) und der "eingefrorene" Zustand kann dann gesichert werden. Parallel können andere Programme weiter mit den Daten arbeiten. Nur sind deren Änderungen in diesem Schappschuss dann nicht enthalten. Aber im nächsten ...

E.
Mitglied: colinardo
colinardo 02.12.2014 aktualisiert um 12:22:51 Uhr
Goto Top
Zitat von @37414:

In Zeile 16 das "WinClose" eingesetzt... aber mit der "Process"-Angabe, da in Zeile 3 ja steht, was genau der
Prozess sein soll.

Wäre das Script grds. OK so?
ließt du überhaupt auch mal die Doku ???
https://www.autoitscript.com/autoit3/docs/functions/WinClose.htm
Mitglied: 37414
37414 02.12.2014 um 13:32:43 Uhr
Goto Top
Zitat von @colinardo:

> Zitat von @37414:
>
> In Zeile 16 das "WinClose" eingesetzt... aber mit der "Process"-Angabe, da in Zeile 3 ja steht, was genau
der
> Prozess sein soll.
>
> Wäre das Script grds. OK so?
ließt du überhaupt auch mal die Doku ???
https://www.autoitscript.com/autoit3/docs/functions/WinClose.htm

Ja, die habe ich gelesen... aber offenbar (noch immer) nicht verstanden.
Was sollte ich denn im Script ändern?

LG
imebro
Mitglied: colinardo
colinardo 02.12.2014 aktualisiert um 13:39:43 Uhr
Goto Top
Zitat von @37414:
Ja, die habe ich gelesen... aber offenbar (noch immer) nicht verstanden.
Was sollte ich denn im Script ändern?
dort muss der Titel des Hauptfensters der Applikation rein...
title The title /hWnd/class of the window to close. See Title special definition.
Mitglied: 37414
37414 02.12.2014 aktualisiert um 13:53:46 Uhr
Goto Top
Mensch, ist das schwierig... vor allem, da mein Englisch mehr als schlecht ist face-sad

Habe also jetzt den Titel eingetragen, der in dem Programmfenster steht, welches geöffnet sein dürfte.
Diese Zeile lautet jetzt so:

WinClose("Daten / Programm (Vers.6.7) - [Anträge]")  

Was jetzt bei TEXT noch rein soll, wüßte ich nicht...

Dann nochmal meine Fragen von vorhin:

Und... ich müßte das jetzt bei jedem Benutzer auf dessen Terminal-Server installieren?
  • Start dann per Task / Dienst?
Kann das "Sleep..." in der vorletzten Zeile so bleiben?

Danke und Gruss,
imebro
Mitglied: colinardo
colinardo 02.12.2014 aktualisiert um 14:29:00 Uhr
Goto Top
Zitat von @37414:
Was jetzt bei TEXT noch rein soll, wüßte ich nicht...
da muss nicht unbedingt was rein, den Fenstertitel würde ich aber nicht exakt übernehmen, da dieser sich sicherlich ändert, vor allen das [Anträge] vermute ich mal stark. Defaultmäßig werden die Fenstertitel von Beginn des Strings an verglichen, der String muss also nicht komplett sein, dadurch wird es universeller.
WinClose("Daten / Programm (Vers.6.7)")  
Wie dein Programm den Fenster-Titel handhabt kann ich aber von hier aus nicht sagen.
Man kann zwar auch aus dem Prozess das Fenster ermitteln, aber dafür habe ich gerade keine Zeit ...

Und... ich müßte das jetzt bei jedem Benutzer auf dessen Terminal-Server installieren?
  • Start dann per Task / Dienst?
Muss bei jedem User ausgeführt werden, wie du das machst liegt bei dir (Autostart/Taskplaner)
Kann das "Sleep..." in der vorletzten Zeile so bleiben?
imebro
ja klar, sonst verbraucht das Script zu viel Prozessorzeit. Das bestimmt ja auch das Checkintervall ...

Viel Erfolg, i'm out now
Grüße Uwe
Mitglied: 37414
37414 03.12.2014 aktualisiert um 08:47:08 Uhr
Goto Top
Hallo und guten Morgen,

ich habe gestern das Script mal so abgeändert, dass die Zeit der Inaktivität in unserem Programm lediglich noch 60 Sekunden beträgt (Zeile 7).
Überprüft wird in einem Intervall von 30 Sekunden (Zeile 5).

Dann habe ich das Script in eine ausführbare Datei umgewandelt (.exe) und zwar mit "Aut2Exe".
Diese EXE-Datei habe ich dann testweise bei mir auf dem Terminalserver gestartet und über den Taskmanager kontrolliert, ob sie auch tatsächlich dort angezeigt wird.
Soweit ich gelesen hatte, funktioniert diese EXE-Datei auch dann, wenn auf dem Terminalserver das Programm "AutoIT" nicht installiert ist, da es sich ja um eine ausführbare Datei handelt.

Nachdem ich die EXE-Datei gestartet hatte, habe ich unser Programm gestartet... dann 60 Sekunden gewartet... und es passierte... NICHTS!
Auch nach mehreren Minuten war das Programmfenster noch immer nicht geschlossen.

Kann jemand von Euch bitte nochmal checken, ob vielleicht doch ein Bug im Programmcode ist?
Ich habe den Pfad zur Programmdatei nochmal überprüft, der im Script in Zeile 3 steht.
Ebenso habe ich den Titel des Programmfensters nochmal überprüft, der in Zeile 16 steht.

Oder habe ich sonst einen Fehler gemacht?

Hier der Script-Code der Test-Datei:

#NoTrayIcon
;Prozess der geschlossen werden soll
Const $PROCESS = "C:\Program Files\HB Datasystems\Antrag\antraege.exe"  
;Checkintervall
Const $INTERVALL = 30
; Zeit der Inaktivität(Sekunden) nach der der Prozess geschlossen wird
Const $IDLETIME = 60

global $idle_time = TimerInit()
$oldPos = MouseGetPos()
While 1
	$nowPos = MouseGetPos()
	if $oldPos = $nowPos and $oldPos[1] = $nowPos[1] then
		if TimerDiff($idle_time) >= ($IDLETIME * 1000) then
			if ProcessExists($PROCESS) Then
				WinClose("Daten / Programm (Vers.6.7)")  
			EndIf
		Endif
	Else
		$idle_time = TimerInit()
		$oldPos = $nowPos
	EndIf
	Sleep($INTERVALL * 1000)
WEnd

Danke und schöne Grüße,
imebro
Mitglied: colinardo
colinardo 03.12.2014 aktualisiert um 09:20:45 Uhr
Goto Top
In Zeile 3 gehört nur der Prozessname antraege.exe hinein und nicht der komplette Pfad !!
Mitglied: 37414
37414 03.12.2014 aktualisiert um 12:22:24 Uhr
Goto Top
Hallo und danke für den Tipp.

Habe das Script soeben getestet und jetzt funktioniert es... auch in tieferen Programm-Fenstern... also wenn der Titel länger ist, als in Zeile 16 angegeben!

Vielen Dank Dir (colinardo) für Deine Hilfe bisher!! face-smile

Eine Frage habe ich jedoch noch:

Sicher wäre es doch auch möglich, diese EXE-Datei nun über die Aufgabenplanung des Terminalservers zu einem bestimmten Zeitpunkt (z.B. 20:30 Uhr) starten zu lassen.

Und in diesem Fall könnte es einfach so sein, dass unser Programm dann einfach geschlossen werden soll, sobald dieser Task startet. Der Vorteil wäre, dass die EXE-Datei nicht ständig Reccourcen des Terminalservers verbraucht.

Was müßte ich dann im Code ändern?
Einfach die Zeile 5 entfernen und in Zeile 7 Null Sekunden eintragen... oder gibt es eine bessere Lösung, um dieses Script sofort ausführen zu lassen?

Danke und schöne Grüße,
imebro
Mitglied: colinardo
colinardo 03.12.2014 aktualisiert um 12:26:28 Uhr
Goto Top
Zitat von @37414:
Sicher wäre es doch auch möglich, diese EXE-Datei nun über die Aufgabenplanung des Terminalservers zu einem
bestimmten Zeitpunkt (z.B. 20:30 Uhr) starten zu lassen.
klar, aber schlag mich nicht wenn dann noch ein User noch an dem Rechner sein Angebot schreibt und plötzlich seine Anwendung runterfährt ;-P
Und in diesem Fall könnte es einfach so sein, dass unser Programm dann einfach geschlossen werden soll, sobald dieser Task startet. Der Vorteil wäre, dass die EXE-Datei nicht ständig Reccourcen des Terminalservers verbraucht.
die sind eigentlich ziemlich gering .... aber jeder wie er es will
Was müßte ich dann im Code ändern?
hier reicht dann ...
#NoTrayIcon
if ProcessExists("antraege.exe") Then  
   WinClose("Daten / Programm (Vers.6.7)")  
EndIf
Grüße Uwe
Mitglied: 37414
37414 03.12.2014 um 13:24:48 Uhr
Goto Top
Zitat von @colinardo:

> #NoTrayIcon
> if ProcessExists("antraege.exe") Then  
>    WinClose("Daten / Programm (Vers.6.7)")  
> EndIf
> 
Grüße Uwe

...und das wäre dann der VOLLSTÄNDIGE Code?

Das mit der späten Arbeit - also nach 20.30 Uhr - fällt bei uns weg, da um diese Zeit garantiert hier niemand mehr arbeitet face-wink

Danke Dir...

LG
imebro
Mitglied: colinardo
colinardo 03.12.2014 aktualisiert um 14:29:19 Uhr
Goto Top
...und das wäre dann der VOLLSTÄNDIGE Code?
ach so, nee das geht in diesem Fall dann so nicht über den Taskplaner. Lass die Sessions wie oben von Emeriks erwähnt beenden das hat hier auch noch nie Probleme gemacht ... oder du lässt ursprüngliche Script für jeden User laufen, wie anfangs erwähnt. Resourcen belegt das Teil so gut wie nicht, da du das ja mit dem Checkintervall steuern kannst.
Mitglied: 37414
37414 03.12.2014 um 14:28:43 Uhr
Goto Top
Hmmm...
ich habe es eben mit Deinem verkürzten Code getestet - per Aufgabenplanung - und es funktionierte einwandfrei!
Wieso meintest Du jetzt, dass das nicht geht??

Ein Kollege meinte eben nur, dass das Programm mit "WinClose..." NICHT ordnungsgemäß geschlossen werden würde.
Dabei hatte ich es so verstanden, dass es jetzt quasi so geschlossen wird, als ob man es manuell beendet.
Was stimmt denn nun? face-smile

Danke und Gruss,
imebro
Mitglied: colinardo
colinardo 03.12.2014 aktualisiert um 14:44:50 Uhr
Goto Top
Zitat von @37414:

Hmmm...
ich habe es eben mit Deinem verkürzten Code getestet - per Aufgabenplanung - und es funktionierte einwandfrei!
Wieso meintest Du jetzt, dass das nicht geht??
Es geht nur wenn es unter einem Useraccount ausgeführt wird, da aber mehrere User auf dem Terminalserver arbeiten geht das so nicht, es könnten ja mehrere User noch angemeldet sein..
Für diesem Fall gehts nur normal mit.
#NoTrayIcon
While ProcessExists("antraege.exe")  
   ProcessClose("antraege.exe")  
Wend
Ein Kollege meinte eben nur, dass das Programm mit "WinClose..." NICHT ordnungsgemäß geschlossen werden
würde.
Doch wenn das Hauptfenster geschlossen wird schon, kenne das Programm aber leider nicht ... Es kommt wie immer auf den Programmierer des Programms an !!
Das normale Verhalten ist, wenn ich das Hauptfenster einer Anwendung schließe, wird auch die Anwendung beendet.
Dabei hatte ich es so verstanden, dass es jetzt quasi so geschlossen wird, als ob man es manuell beendet.
Korrekt
Was stimmt denn nun? face-smile
Wie gesagt, kenne ich euer Programm nicht, gibt immer mal wieder Ausnahmen ...

Da bleibt euch nur zu testen wie sich das Programm und die DB verhält, das kann ich von hier aus leider nicht erbringen !!
Mitglied: 37414
37414 03.12.2014 um 14:59:06 Uhr
Goto Top
Danke...

Aber wenn ich das Programm mit "WinClose..." unter allen 7 Benutzerkontos auf dem Terminalserver installieren muss... würden dann in der Aufgabenplanung des Terminalservers nicht 7 Aufgaben erscheinen - jeweils mit anderem Benutzernamen?

Ich denke, dass die Aufgabenplanung des Terminalservers doch nur 1 x existiert - oder habe ich da jetzt was falsch im Kopf?


Wenn ich das Ganze jetzt nur 1 x installiere, aber dazu den Code "ProcessClose" nutze, muss ich dann befürchten, dass es doch Probleme mit der Datenbank gibt, da das Programm ja dann nicht "ordnungsgemäß" geschlossen wurde?

Wie wäre Deine Empfehlung?

Danke und Gruss,
imebro
Mitglied: colinardo
colinardo 03.12.2014 aktualisiert um 15:06:28 Uhr
Goto Top
Zitat von @37414:
Wenn ich das Ganze jetzt nur 1 x installiere, aber dazu den Code "ProcessClose" nutze, muss ich dann befürchten,
dass es doch Probleme mit der Datenbank gibt, da das Programm ja dann nicht "ordnungsgemäß" geschlossen
wurde?
zum dritten und letzten mal, hab ich doch oben geschrieben, das kann ich von hieraus nicht sagen ICH KENNE DAS PROGRAMM NICHT.
Bisher hatte ich damit aber noch nirgendwo Probleme.
Wie wäre Deine Empfehlung?
Ausprobieren wie sich das Programm verhält oder den Hersteller fragen was der dazu meint.
Mitglied: 37414
37414 03.12.2014 aktualisiert um 15:13:59 Uhr
Goto Top
OK...
Sorry, ich hatte Deine Aussage wohl falsch verstanden in Bezug auf meine Frage...

Ich würde mich nun dafür entscheiden, den ursprünglichen Task (mit WinClose) an jedem Arbeitsplatz mit der Terminalserver-Anmeldung des jeweiligen Benutzers in der Aufgabenplanung zu installieren.

Aber mir ist noch nicht klar, ob ich dann nicht immer auf die gleiche Aufgabenplanung zugreife?
Wenn ja, dann müßte ich mich doch nicht an jeden der 7 Arbeitsplätze setzen... mich dort mit der jeweiligen Benutzerkennung am Terminalserver einloggen... und dann den Task in der Aufgabenplanung erstellen, sondern könnte das alles von meinem Rechner aus machen, wenn ich am Terminalserver als Admin angemeldet bin.

ODER:
Würde es ggf. sogar reichen, wenn ich im Task die Administrator-Benutzer-Anmeldung eintrage? Somit müsste der Task doch auch funktionieren, wenn verschiedene User das Programm noch geöffnet haben, da ich ja keine Benutzer-Anmeldung der Mitarbeiter nutze...

Sehe ich das richtig? face-wink

nochmals Danke,
imebro
Mitglied: colinardo
colinardo 03.12.2014 aktualisiert um 15:10:52 Uhr
Goto Top
Zitat von @37414:
Aber mir ist noch nicht klar, ob ich dann nicht immer auf die gleiche Aufgabenplanung zugreife?
Es gibt nur eine Aufgabenplanung für den ganzen Server nicht pro Benutzer ..
Mitglied: 37414
37414 03.12.2014 um 15:13:00 Uhr
Goto Top
Zitat von @colinardo:

> Zitat von @37414:
> Aber mir ist noch nicht klar, ob ich dann nicht immer auf die gleiche Aufgabenplanung zugreife?
Es gibt nur eine Aufgabenplanung für den ganzen Server nicht pro Benutzer ..



OK,
dann müßte es doch ggf. so gehen, wie eben unter "ODER" beschrieben... also mit der Admin-Anmeldung im Task der Aufgabenplanung.
Mitglied: 37414
37414 04.12.2014 aktualisiert um 09:15:54 Uhr
Goto Top
Guten Morgen...

Ich habe den Task in der Aufgabenplanung des Terminalservers jetzt so angepasst, dass er mit der Administrator-Anmeldung ausgeführt wird mit den Zusätzen:

  • unabhängig von der Benutzeranmeldung ausführen
  • mit höchsten Privilegien ausführen

Hier kann man die Einstellungen sehen:

1

Ich vermute mal, dass mit diesen Einstellungen automatisch das Programm auch bei mehreren Mitarbeitern geschlossen würde, wenn es dort noch geöffnet ist, wobei es unerheblich sein müsste, ob diese Benutzer am Terminalserver angemeldet sind oder nicht.

Ist das nach Eurer Meinung auch so?

Danke und Gruss,
imebro
Mitglied: colinardo
colinardo 04.12.2014 aktualisiert um 09:22:57 Uhr
Goto Top
yip so isses, dachte sowas wäre klar gewesen ...
Mitglied: 37414
37414 04.12.2014 aktualisiert um 13:21:06 Uhr
Goto Top
Hmmm... bin jetzt doch ein wenig verwirrt face-sad

Ich hatte das Script heute Morgen mal testweise laufen lassen.
Allerdings war ich dabei der einzige Benutzer, der das Programm, welches geschlossen werden soll, auch offen hatte... und ich war unter meiner normalen Benutzeranmeldung am Terminalserver angemeldet (also nicht als Admin).

Ergebnis:
Es funktionierte... das Programm wurde nach Start des Tasks, auf meinem Terminalserver tatsächlich geschlossen!

Eben wollte ich es dann erneut testen - nur diesmal so, dass das Programm auf 2 verschiedenen Benutzeraccounts lief (bei mir und einer Kollegin).
Ich hatte hierzu den Task einfach 3 Minuten nach der aktuellen Zeit eingestellt.

Ergebnis:
Das Programm wurde auf beiden Terminalserver-Desktops NICHT geschlossen... also auch bei mir nicht, obwohl es bei mir heute Morgen funktioniert hatte.

Die Einstellungen sind so, wie auf dem Foto (siehe letzter Post) gezeigt.

Was muss ich noch ändern, damit das Programm auch bei mehreren Kollegen geschlossen wird, wenn diese am Terminalserver angemeldet sind und das Programm offen haben?

Danke und Gruss,
imebro
Mitglied: colinardo
colinardo 04.12.2014 aktualisiert um 13:32:48 Uhr
Goto Top
Lass es mit dem SYSTEM-Account laufen...

eb70e4b6c92c969e6c494d814586813d

läuft hier damit einwandfrei, gerade nochmal getestet.
Mitglied: 37414
37414 04.12.2014 um 13:45:35 Uhr
Goto Top
Danke Dir.
Habe die Änderung jetzt so vorgenommen und bin nun gespannt.
Leider kann ich es erst morgen Früh testen, da ich ansonsten alle Mitarbeiter aus dem Programm werfe face-wink

Werde dann morgen berichten...

Danke und Gruss,
imebro
Mitglied: 37414
37414 05.12.2014 aktualisiert um 08:26:26 Uhr
Goto Top
UPDATE:

Guten Morgen...

Eben habe ich das Script nochmal per Task in der Aufgabenplanung getestet.
Diesmal mit den veränderten Einstellungen (Benutzerkonto SYSTEM).
Dabei war eine Kollegin mit ihrem Benutzerkonto am Terminalserver angemeldet und hatte das Programm geöffnet.
Ich war ebenfalls am Terminalserver mit meinem Benutzerkonto angemeldet und hatte das Programm ebenfalls geöffnet.

Als dann 2 Minuten später der Task startete, wurde das Programm bei uns beiden leider NICHT geschlossen...

Nun habe ich folgendes geändert:

Unter "Beim Ausführen der Aufgaben folgendes Benutzerkonto verwenden" habe ich nun mein eigenes Benutzerkonto eingetragen.
Darunter habe ich einen Haken gemacht bei "Nur ausführen, wenn der Benutzer angemeldet ist".

Dann habe ich den Task 2 Minuten in die Zukunft gesetzt und tatsächlich wurde bei mir das Programm durch den Task geschlossen.
Bei der Kollegin nicht... aber das war mir in diesem Fall auch klar.

Ein weiterer Test:

Hierbei habe ich unter "Beim Ausführen der Aufgaben folgendes Benutzerkonto verwenden" mein eigenes Benutzerkonto gelassen (wie ja im Test davor auch).
Aber diesmal habe ich einen Haken gemacht bei "Unabhängig von der Benutzeranmeldung ausführen".

Dann wieder den Task 2 Minuten in die Zukunft gesetzt und diesmal funktionierte es NICHT... das Programm blieb bei mir offen (und natürlich bei der Kollegin ebenfalls).

Ergebnis:

Es scheint so, als ob es nur funktioniert, wenn die Ausführung mit dem eigenen Benutzerkonto durchgeführt wird sowie mit der Einstellung "Nur ausführen, wenn der Benutzer angemeldet ist".

Meine Idee wäre nun, an jedem der 7 Arbeitsplätze am Terminalserver... (mit dem jeweiligen Benutzerkonto angemeldet)... einen eigenen Task in der Aufgabenplanung zu erstellen, wobei dann jeweils zur Ausführung das eigene Benutzerkonto des Mitarbeiters ausgewählt wird sowie die Einstellung "Nur ausführen, wenn der Benutzer angemeldet ist".

Wäre das eine machbare Lösung oder könnte es Probleme geben, da ja dann wahrscheinlich 7 verschiedene Tasks für die gleiche Aufgabe in der Aufgabenplanung erscheinen?

Hat sonst noch jemand von Euch eine Lösung?

Danke und Gruss,
imebro
Mitglied: emeriks
emeriks 05.12.2014 um 08:39:02 Uhr
Goto Top
Hi,
sorry, habe Euren Dialog jetzt nicht ins kleinste Detail verfolgt, aber das scheint mir doch alles ganz logisch. Dieser Art Scripte funktionieren nur, wenn sie in der selben Sitzung (nicht bloß unter der gleichen Anmeldung) laufen, wie das Programm (Fenster), welches man damit bedienen will. Bzw., das Abfragen des Mauszeigers, um dessen Position als Indiz für Inaktivität zu nehmen, kann natürlich auch nur innerhalb der selben Sitzung funktionieren. Wenn das also irgendwie finktionieren soll, dann müsste man das Script am besten gleich bei Login ausführen (Autostart-Menü oder HKCU Run), damit es ständig pro User 1x im Hintergrund läuft und dann ggf. aktiv werden kann. Oder eben einen Scheduled Task bei "Trennen der Benutzersitzung".

@37414
Hast Du denn überhaupt schon mal probiert, ob das nicht ganz einfach über das automatische Abmelden inaktiver und/oder getrennter Sitzungen geregelt werden kann?

E.
Mitglied: 37414
37414 05.12.2014 um 09:12:34 Uhr
Goto Top
Hallo "E"...

Danke für Deine Antwort.
Wir sind ja längst davon abgekommen, das Script dauerhaft laufen zu lassen und damit in bestimmten Abständen zu prüfen, ob noch eine Aktivität im Programm stattfindet. Mittlerweile nutze ich diesen Code:

#NoTrayIcon
if ProcessExists("antraege.exe") Then  
   WinClose("Daten / Programm (Vers.6.7)")  
EndIf

Dieses Script läuft als Task in der Aufgabenplanung und schließt abends um 20.30 Uhr das Programm, falls dieses noch offen ist.

Meinst Du, dass ich das Script (als EXE-Datei) einfach ins jeweilige Login-Script der entsprechenden User mit einbauen soll?
Wenn ja, dann müßte ich den Code ja wieder so ändern, wie vorher... und das würde bedeuten, dass es wieder ständig im Hintergrund läuft.

Mit der Nutzung bei autom. Abmelden inaktiver und/oder getrennter Sitzungen... habe ich noch nicht verstanden. Kannst Du das mal kurz erklären?
Was muss ich dann wo einstellen? Und... als Task oder das Script als EXE-Datei...?

Am liebsten wäre es mir, wenn es eine Lösung mit dem hier angegebenen Code geben könnte, sodass bei jedem Benutzer automatisch um 20.30 Uhr das Programm geschlossen werden kann. Wie muss ich den Task dann bei jedem Benutzer einrichten?

Danke und Gruss,
imebro
Mitglied: colinardo
colinardo 05.12.2014 aktualisiert um 09:26:28 Uhr
Goto Top
Hallo Imebro, emeriks,
ich hoffe mal es wurde das letzt genannte Script (das mit der While-Schleife) verwendet. Das andere ist in der Tat nicht für diese Art geeignet, das letzte jedoch schon, weil der System-Account alle Prozesse sieht und deswegen auch alle beenden kann.

Wie gesagt konnte ich das hier einwandfrei mit 6 gleichzeitig am Term-Server angemeldeten Usern nachstellen. Kann ich auch gerne als Beweis mit Video hier einstellen.

Wie immer bleibt mir hier die Unsicherheit wie euer Programm hier arbeitet, aber hier hat es mit unterschiedlichsten Programmen 100% funktioniert.

Grüße Uwe
Mitglied: colinardo
colinardo 05.12.2014 aktualisiert um 09:23:43 Uhr
Goto Top
ich hoffe mal nicht das du die EXE als x64 exe kompiliert hast ....dann könnte es nämlich sein das sie die Prozesse nicht "sieht"
Mitglied: 37414
37414 05.12.2014 aktualisiert um 13:40:16 Uhr
Goto Top
Hallo "colinardo" und "emeriks",

ich habe jetzt das Script genutzt, welches ich in meinem Posting von heute 9.12 Uhr nochmals einkopiert hatte.
Es enthält jedoch keine "While-Schleife"...

Ich vermute, Du meintest diesen Code:
#NoTrayIcon
While ProcessExists("antraege.exe")  
   ProcessClose("antraege.exe")  
Wend

Mit dem anderen Script hat es bei mir ja funktioniert, mit den von mir oben genannten Einstellungen, aber halt bei sonst keinem Mitarbeiter.

Hiermit habe ich es getestet:
#NoTrayIcon
if ProcessExists("antraege.exe") Then  
   WinClose("Daten / Programm (Vers.6.7)")  
EndIf

Habe dieses Script jetzt nochmal explizit OHNE x64 kompiliert, da ich mir nicht mehr sicher war, ob ich den Haken vorher dort gesetzt hatte.

Kann es dann aber erst Montag Morgen testen.

Jetzt bin ich schon ein wenig verwirrt... mit den ganzen Codes.
War es nicht so, dass das "ProcessClose("antraege.exe")" nicht ganz ohne Gefahr für die Datenbanken war und dass daher das "WinClose("Daten / Programm (Vers.6.7)")" die bessere Wahl wäre?
Wenn das "ProcessClose("antraege.exe")" jedoch gleichzusetzen ist mit dem Beenden des Prozesses über den Taskmanager, kann ich das ruhig nehmen, denn wir müssen das Programm des Öfteren über den Taskmanager schließen, wenn es mal wieder hängt face-wink

Danke und Gruss,
imebro
Mitglied: colinardo
colinardo 05.12.2014 aktualisiert um 13:45:53 Uhr
Goto Top
OK dann noch mal zum mitlesen ....

Zitat von @37414:
Ich vermute, Du meintest diesen Code:
> #NoTrayIcon
> While ProcessExists("antraege.exe")  
>    ProcessClose("antraege.exe")  
> Wend
> 
KORREKT ! Nur damit läuft es über den Taskplaner für alle User über den Systemaccount.

Hiermit habe ich es getestet:
> #NoTrayIcon
> if ProcessExists("antraege.exe") Then  
>    WinClose("Daten / Programm (Vers.6.7)")  
> EndIf
> 
Das Script geht NUR wenn es bei jedem User ausgeführt wird und NICHT zentral für alle. Da es eben eine Referenz zu den Fenstern benötigt.


War es nicht so, dass das "ProcessClose("antraege.exe")" nicht ganz ohne Gefahr für die Datenbanken war
hatte ich noch bei keinem Programm Probleme .... Hatte schon mal gesagt "Versuch macht kluch" ....
Für sowas hat man immer ein VM-Testsystem an der Hand wo man das testen kann.

WinClose geht wie gesagt nur im Kontext jedes einzelnen Users, da die Fenster ja Userbezogen sind!

"Odysee Ende" - Over and Out
Mitglied: 37414
37414 05.12.2014 um 15:07:52 Uhr
Goto Top
Danke Dir nochmals... face-wink

Jezt hab ich´s kapiert face-smile))

Wenn ich nun das Script mit "WinClose" bei jedem User ausführen möchte, dann müßte ich ja bei jedem User auf dem Terminalserver in der Aufgabenplanung einen Task erstellen, der diese EXE-Datei dann startet.

Würde das denn funktionieren, wenn in der Aufgabenplanung des Terminalservers dann 7 gleiche Tasks erscheinen (jeweils für einen anderen User)?
Und... müssten die Tasks dann z.B. immer mit einer Minute Abstand eingegeben werden (20.30 Uhr / 20.31 Uhr / 20.32 Uhr.......)?

Mir wäre die "WinClose"-Lösung lieber, da sicherer face-wink

Danke und schönes WE,
imebro
Mitglied: colinardo
colinardo 05.12.2014 aktualisiert um 15:14:24 Uhr
Goto Top
Zitat von @37414:
Würde das denn funktionieren, wenn in der Aufgabenplanung des Terminalservers dann 7 gleiche Tasks erscheinen (jeweils
für einen anderen User)?
klar, wird ja jeweils separat für den jeweiligen User ausgeführt. Einen Schönheitswettbewerb gewinnt das dann aber so sicher nicht face-wink
Und... müssten die Tasks dann z.B. immer mit einer Minute Abstand eingegeben werden (20.30 Uhr / 20.31 Uhr / 20.32
Uhr.......)?
Nein ..
Mir wäre die "WinClose"-Lösung lieber, da sicherer face-wink
Deine Entscheidung face-smile

Ein Client der eine DB beschädigen kann, das Programm muss ja voll der Mist sein face-big-smile, du Armer ....das hat bestimmt wieder so ein Hiwi programmiert.
Mitglied: 37414
37414 08.12.2014 um 08:07:29 Uhr
Goto Top
Guten Morgen...

Vielen Dank für die weitere Antwort.

Ja... Hiwi wäre der passende Ausdruck face-wink

Aber eigentlich dürfte die DB nicht beschädigt werden, denn - wie ja schon geschrieben - müssen wir das Programm eh öfter mal per Taskmanager beenden und dabei wird es ja eh auch so raus gekickt, als wenn man es über "Process close" macht (denke ich jedenfalls) face-smile

Von daher teste ich jetzt mal die "WinClose"-Lösung unter jedem Windows-Benutzer-Account und denke, dass es dann funktioniert.

Danke und schöne Grüße,
imebro
Mitglied: 37414
37414 10.12.2014, aktualisiert am 11.12.2014 um 08:21:11 Uhr
Goto Top
Hallo nochmal,

ich habe mal eine grundsätzliche Frage.

Es ist ja so, dass der Task in der Aufgabenplanung ein eventuell noch geöffnetes Programm auf dem Terminalserver schließen soll, falls ein Mitarbeiter seine Terminalserver-Verbindung geschlossen hat, ohne das Programm zu schließen und ohne sich korrekt vom Terminalserver abzumelden.

Wenn nun in der Aufgabenplanung unter "Ergebnis der letzten Ausführung" der Hinweis "Der Vorgang wurde erfolgreich beendet. (0x0)" auftaucht...
Bedeutet das, dass in diesem Fall tatsächlich unser Programm durch den Task beendet werden musste, da es bei dem Mitarbeiter noch geöffnet war?

Hier der Screenshot dazu:
93ad198f4792bec63105c50bb1049906

Dies war nämlich bei diesem Kollegen so, wie man ja sieht...
Bei den anderen Kollegen stand dort - wie man sieht - folgende Meldung:

"Der angeforderte Vorgang konnte nicht ausgeführt werden, da der Benutzer nicht im Netzwerk angemeldet ist. Der angegebene Dienst ist nicht vorhanden (0x800704DD)."

In den Details der Aufgabenplanung stand bei den anderen Kollegen zusätzlich noch "Fehler beim Aufgabenstart" (siehe Screenshot).
Das würde für mich bedeuten, dass die anderen Kollegen sich also korrekt vom Terminalserver abgemeldet hatten.

Hier ein Screenshot aus der Aufgabenplanung von einem Mitarbeiter, bei dem der Task das Programm offenbar NICHT schließen musste:
f0c816e47979ec202eaf83001fc9f638

In jedem Fall habe ich heute Morgen auch nochmal bei 2 Kollegen getestet, ob es grundsätzlich funktioniert mit dem Task... und dieser Test war erfolgreich!!

Danke und schöne Grüße,
imebro
Mitglied: 37414
37414 11.12.2014 aktualisiert um 08:19:43 Uhr
Goto Top
hmmm....

Auch heute Morgen gab es wieder das gleiche Problem, dass sich ein Kollege offenbar nicht vom Programm abgemeldet hatte und es musste geschlossen werden. Seltsam...
Weist diese Meldung (siehe Screenshot) tatsächlich darauf hin, dass das Script durch den Task ausgeführt werden "musste" und das Programm schließen musste?

Hier der Screenshot:
93ad198f4792bec63105c50bb1049906

Danke und Gruss,
imebro
Mitglied: 37414
37414 12.12.2014 um 08:58:29 Uhr
Goto Top
Kann mir da niemand von Euch mehr weiterhelfen?

Auch heute Morgen wieder der gleiche Fall.
Und das, obwohl ich den Task für den entsprechenden Kollegen gestern gelöscht und nochmals neu angelegt habe.

Wäre schön, wenn Ihr mir hier nochmal weiterhelfen könntet.

Danke,
imebro
Mitglied: emeriks
emeriks 12.12.2014 um 09:59:18 Uhr
Goto Top
Hi,
doch kann ich.
Sorry, aber vergiss das Script. Sei ehrlich: Du überblickst das doch gar nicht, verstehst nicht die Zusammenhänge, habe ich den Eindruck. Das ist ja nicht schlimm. Aber dann solltest Du Dir sowas nicht ans Bein binden. Nicht in der Produktivumgebung! Du kannst diesen Weg ja weiter verfolgen, in einer Testumgebung. Wenn es dann läuft, dann kannst Du es immer noch umsetzen.

Du hast ein Problem:
Ein laufendes Programm sperrt Dateien, sodass diese - mit Deiner konkreten Backupmethode - nicht gesichert werden können.

Lösung 1: --> Das Programm muss beendet werden.
Wenn ich es richtig mitbekommen habe, hat das Programm keine Probleme mit der DB, wenn es "hart" beendet wird. Also beende es!
Billigster Ansatz: Sitzungs Timeouts!

Lösung 2: --> Die Sicherungsmethode ändern, sodass VSS benutzt wird.
Da gibt es genügend Programme am Markt.

E.
Mitglied: 37414
37414 12.12.2014 aktualisiert um 10:20:46 Uhr
Goto Top
Im Grunde blicke ich schon durch...

Aber nochmal kurz zusammengefasst:

Wir nutzen mit 7 Mitarbeitern ein Programm, welches auf einem Terminalserver läuft.
Die 7 User greifen von ihrem Arbeitsplatz aus jeweils mit ihrem eigenen User-Login auf den Terminalserver zu.

Nun passiert es ab und zu, dass einer der 7 Nutzer vergisst, abends das Programm zu schließen und meldet sich dabei nicht korrekt vom Terminalserver ab (Start / abmelden), sondern schließt einfach das Terminalserver-Fenster über das "Schließen-Kreuz".
Somit bleibt das Programm im Hintergrund noch immer geöffnet.

Dadurch funktioniert die nächtliche Bandsicherung nicht korrekt, da das noch geöffnete Programm ja noch immer auf die Datenbanken zugreift.

Dieses Problem möchte ich nun so vermeiden, indem ich jeden Abend um 20.30 Uhr einen Task starte, der wiederum eine EXE-Datei startet, welche das Programm sauber schließt, indem es per "WinClose" das Programmfenster schließt.

Das funktioniert grundsätzlich auch einwandfrei bei allen Kollegen, wenn ich es teste.

Wenn ich nun morgens die Aufgabenplanung kontrolliere, steht unter "Ergebnis der letzten Ausführung" bei einem ganz bestimmten Kollegen immer folgendes:

"Der Vorgang wurde erfolgreich beendet. (0x0)"

Bei den anderen 6 Kollegen steht dort:

"Der angeforderte Vorgang konnte nicht ausgeführt werden, da der Benutzer nicht im Netzwerk angemeldet ist. Der angegebene Dienst ist nicht vorhanden (0x800704DD)."

Was genau bedeutet dies nun?
Ich hatte schon vermutet, dass bei diesem einen Kollegen einfach der Task mit der EXE-Datei ausgeführt wurde... also dass der Kollege tatsächlich vergessen hatte, sich korrekt vom Terminalserver abzumelden und das Programm zu schließen... und das deshalb der Vorgang erfolgreich beendet wurde.
Das kann aber nicht sein, da er mir versichert hat, sich gestern korrekt abgemeldet zu haben und auch das Programm geschlossen hatte.

Wieso also gibt es 6 x die gleiche Meldung und einmal eine andere Meldung, obwohl der Task für alle 7 Mitarbeiter in der Aufgabenplanung des Terminalservers gleich angelegt ist?

So... nun habe ich es aber wirklich nochmal ganz genau erklärt (hoffe ich doch...) face-wink

Danke und Gruss,
imebro
Mitglied: emeriks
emeriks 12.12.2014 um 10:35:26 Uhr
Goto Top
Du bist echt nen zäher Brocken ... face-wink

... da der Benutzer nicht im Netzwerk angemeldet ist. ....
Lass mich raten: Das könnte bedeuten, dass der betreffende Benutzer nicht angemeldet war.

... "Der Vorgang wurde erfolgreich beendet. (0x0) ...
Im Umkehrschluss könnte das dann bedeuten, dass dieser Benutzer dann angemeldet war.

...Das kann aber nicht sein, da er mir versichert hat, sich gestern korrekt abgemeldet zu haben und auch das Programm geschlossen hatte....
Und die Schlussfolgerung darauf überlasse ich dann mal Dir.


Ist dein Pronlem gelöst? Ich meine das mit der Datensicherung? Können die Daten jetzt jede Nacht gesichert werden?

E.
Mitglied: 37414
37414 12.12.2014 um 11:24:28 Uhr
Goto Top
Hallo und danke... aber Du bist auch nen echt zäher Brocken face-wink

Die Datensicherung ist hier ja überhaupt nicht das Problem.
Die funktioniert seit Jahren einwandfrei als Bandsicherung.

Nur werden eben ab und zu die Datenbanken dieses einen Programms nicht komplett gesichert, wenn jemand über Nacht das entsprechende Programm nicht geschlossen hatte.

Alleine das wollte ich verhindern, indem ich das Programm eben dann mit einer ausführbaren Datei per Task in der Aufgabenplanung automatisch schließe face-smile

Ist logisch, dass die 6 Benutzer nicht angemeldet waren, wenn dies dort steht und es ist auch logisch, dass der eine Benutzer offenbar angemeldet war, wenn die andere Meldung erscheint. Aber wenn er mir doch jetzt am 3. Tag hintereinander versichert, dass er das Programm geschlossen hatte und dass er sich auch ordnungsgemäß vom Terminalserver abgemeldet hatte, dann ist das doch merkwürdig.

Deshalb halt meine Frage/n face-wink

Ich werde am Montag persönlich neben ihm stehen, wenn er sich abmeldet... mal schauen, ob er vielleicht nicht doch das Terminalserver-Fenster nur mit dem "Schließen-Kreuz" schließt... das wäre die noch einzige Möglichkeit. Und wenn ja, dann sind mindestens 3 Glühwein auf unserem Weihnachtsmarkt fällig face-wink

Danke und Gruss,
imebro