Die Verknüpfungsdatei startet nicht immer, wenn die Tastenkombination gedrückt wird

584
Divin3

In meiner Firma haben wir kleine Arbeitsplätze ~ 13 Zoll mit Touchscreen.
Das Betriebssystem ist: Microsoft Windows Embedded Standard 6.1.7601 Service Pack 1 Build 7601
Auf den Workstations befinden sich 5 Tasten, die für jede Tastenkombination zugeordnet werden können. (Beispiel ctrl+alt+shift+[any key on the keyboard])

Es gibt zwei Programme, die darauf ausgeführt werden müssen, damit die Arbeiter arbeiten können. Manchmal schließen die Arbeiter aus Versehen eines der Programme, daher habe ich mich entschlossen, eine Lösung dafür zu finden, da sie die Programme nicht selbst starten kann.

Also habe ich:
- eine Batch-Datei erstellt, die beim Start prüft, ob die Programme ausgeführt werden; wenn nicht, startet sie sie;
- eine Verknüpfung der Stapeldatei erstellt (in %appdata%\Microsoft\Windows\Start Menu\Programswie hier vorgeschlagen );
- fügte eine Tastenkombination hinzu (Strg + Alt + S);
- eine der Tasten auf der Workstation der Tastenbelegung zugewiesen haben.

Theoretisch schien das eine gute Idee zu sein, aber in der Praxis funktionierte die Tastenkombination nicht richtig.

Nach der Fehlerbehebung stellte ich fest, dass eines der Programme das Problem verursacht.
Lasst uns die Programme Aund aufrufen B. Wenn sich Bder Desktop im Vordergrund befindet, funktioniert die Tastenkombination ordnungsgemäß und die Batchdatei wird gestartet. Aarbeitet im Vollbildmodus. Wenn also die Tastenkombination gedrückt wird, während sie Avorne ist, funktioniert sie nicht.
Ich habe also eine alt + tabTastenkombination für eine andere Taste zugewiesen, aber hier setzt das Problem an.

Wenn ich zuvor die ctrl + alt + STastenkombination gedrückt habe, während sie Avorne war, funktioniert sie auch nach dem Wechsel zum Boder zum Desktop nicht.

Was es interessanter macht, ist, dass, wenn ich eine weitere Tastenkombination für eine andere Tastenkombination erstellt habe, sagen ctrl + alt + Dund ausführen, nachdem der Betrieb ctrl + alt + Sabgebrochen wurde, der Fehler behoben wird und der ctrl + alt + SVorgang wieder funktioniert, Boder der Desktop den Fokus hat.

Versuchte das, hat nicht funktioniert.
Rot dieses Forum. Keine Lösung.

Ich suche nach einer Lösung / Workaround / einer anderen Methode, um dieses Problem zu lösen.

Ich möchte keine Programme von Drittanbietern installieren. Ich kann jedoch die Einstellungen und die Registrierung bei Bedarf ändern.

BEARBEITEN:

Die Batchdatei

echo off tasklist /FI "IMAGENAME eq progB.exe" 2>NUL | find /I /N "progB.exe">NUL if "%ERRORLEVEL%"=="1" ( cd C:\<progB path> start /MAX progB.exe  )  tasklist /FI "IMAGENAME eq progA.exe" 2>NUL | find /I /N "progA.exe">NUL if "%ERRORLEVEL%"=="1" C:\<progA path>  exit 
2
Tastenkombinationen waren immer flockig. Eine Brute-Force-Lösung wäre, die Ausführung der Batchdatei jede Minute wiederholt zu planen. Wenn die Programme laufen, nehme ich nicht an, dass dies vom Benutzer bemerkt wird. harrymc vor 8 Jahren 1
@ harrymc - Ich habe an etwas Ähnliches gedacht, aber es könnte Probleme verursachen, wenn der Arbeiter scannt und das Programm den Fokus verliert. Die Workstations arbeiten auch etwas langsam und selbst für eine einfache Batchdatei dauert es 5-10 Sekunden Divin3 vor 8 Jahren 0
5-10 Sekunden, nur um festzustellen, dass die Programme laufen? Wenn Sie die Batchdatei veröffentlichen, können wir sie möglicherweise verbessern. harrymc vor 8 Jahren 0
@ harrymc - aktualisiert. Es dauert lange, da die Workstations zu langsam sind Divin3 vor 8 Jahren 0
Ich weiß nicht, was Sie auf diesen Systemen haben. WMIC ist möglicherweise schneller: `WMIC-Prozess erhält Beschriftung | find / i / n "prog.exe". Es gibt auch Powershell Get-Process und Powershell über WMI: Get-WMIObject Win32_Process. harrymc vor 8 Jahren 0
@ harrymc - Die Stationen verfügen über Intel Atom-Prozessoren mit 1,6 GHz, 2 GB RAM und 32 GB SSD. Der Prozessor reicht gerade aus, um die notwendigen Programme auszuführen. Das Öffnen eines Explorer-Fensters erscheint auf diesen Systemen manchmal wie eine Ewigkeit. Die WMIC-Funktion ist eine viel elegantere Lösung, scheint jedoch die gleiche Geschwindigkeit zu haben oder sogar langsamer zu sein Divin3 vor 8 Jahren 0
Fragen: (1) Sind progA / B von Ihnen anpassbar? (2) Können Sie neue Programme einführen? (3) Wenn nein, ist es aus Sicherheitsgründen und ist ein von Ihnen erstelltes neues Programm akzeptabel? (4) Wenn Sie cmd öffnen und "dir / path / to // file" ausführen, ist das dir auch langsam? harrymc vor 8 Jahren 0
@ harrymc - 1. Beide Programme verfügen über eine ini-Datei, die geändert werden kann. Ich habe nichts gefunden, was nützlich sein kann. 2. Ich kann, aber ich will es nicht, weil ich in Schwierigkeiten geraten kann, falls die Mutterfirma dies für "unsicher" hält. 3. Einfache reg / batch-Dateien werden akzeptiert, bis ich meinem Chef eine Erklärung für den Fall geben kann, dass ich gefragt werde. Es gab Fälle, in denen ich einfache portable Exe-Dateien eingeführt habe, aber nur dann, wenn eine Lösung für ein Problem angefordert wurde und dies die einzige Möglichkeit war, dieses Problem zu lösen. 4. Um Ihnen eine Vorstellung zu geben, dauert `dir` in system32 auf der Workstation ~ 20 Sekunden für 2470 Dateien Divin3 vor 8 Jahren 0
Das lässt nicht zu viele Möglichkeiten für eine schnellere Erkennung. Sperrt progA / B ausschließlich Dateien? harrymc vor 8 Jahren 0
Oder Sie können progA / B auf diese Weise aufrufen: "prog 2 >> file". Dadurch wird die Datei ausschließlich gesperrt, sodass das Skript Prog starten kann, wenn die Datei nicht vorhanden ist oder wenn sie gelöscht werden kann. harrymc vor 8 Jahren 0
@harrymc - Ich verstehe diese Methode nicht. Könntest du das erklären? Divin3 vor 8 Jahren 0
"prog 2 >> file" startet das Programm mit der Umleitung der Fehlerdatei, die unter Linux auch stderr genannt wird, auf der normalerweise von den meisten Programmen nichts geschrieben wird. Während das Programm läuft, ist die Datei gesperrt und kann nicht gelöscht werden, da sie gerade verwendet wird. Wenn Sie dem Programmaufruf "2 >> Datei" hinzufügen können, lassen Sie es mich wissen und ich werde es testen und eine Antwort hinzufügen, die die Methode detailliert beschreibt. Siehe [E / A-Umleitung und Pipes] (http://sourcedaddy.com/windows-7/io-redirection-and-pipes.html). harrymc vor 8 Jahren 0
@harrymc - ja es funktioniert, die Datei wird erstellt und ist gesperrt. Beachten Sie, dass ich auch eine Methode brauche, um das Programm schließen zu können, ohne dass es im Wartungsfall automatisch gestartet wird. Divin3 vor 8 Jahren 0
Ich habe meine Antwort hinzugefügt. harrymc vor 8 Jahren 0
Nur ein kurzer Hinweis - haben Sie das Tool "AutoHotkey" probiert? Ich habe Fälle gelesen, in denen Tasten eingeklemmt werden konnten, die von der Windows-Hotkey-Funktion nicht verarbeitet wurden. Es ist eine etwas komplexere Lösung, aber Sie können es versuchen. xpac vor 8 Jahren 0
@ xpac - Ich kann keine Programme von Drittanbietern installieren, da dies gegen die Unternehmensrichtlinien verstößt. Divin3 vor 8 Jahren 0

2 Antworten auf die Frage

1
harrymc

Eine Brute-Force-Lösung besteht darin, die Ausführung der Batchdatei jede Minute wiederholt zu planen. Das Ziel ist, dass, wenn die Programme ausgeführt werden, diese Prüfung vom Benutzer nicht wahrgenommen wird.

Leider ist auf diesen langsamen Computern mit Windows Embedded Standard 6 die tasklist und ihre Variante viel zu langsam. Daher müssen wir einen anderen Mechanismus finden, um zu überprüfen, ob die Programme ausgeführt werden. Glücklicherweise scheint die Prüfung auf Vorhandensein einer Datei immer noch sehr schnell zu sein.

Ich schlage vor, die Programme mit dieser Syntax zu starten:

prog 2 >> \path\to\lockfile 

Der Parameter "2 >> file" zeigt an, dass die Fehlerdatei von prog in die Sperrdatei umgeleitet wird. Diese Datei, die auch unter Linux als stderr bezeichnet wird, wird normalerweise von den meisten Programmen nicht beschrieben. Während das Programm läuft, ist die Datei gesperrt und kann nicht gelöscht werden, da sie gerade verwendet wird. Wenn das Programm gestoppt ist, kann die Datei vorhanden sein oder nicht, sie kann jedoch gelöscht werden.

Hier ein Beispiel eines Skripts, das überprüft, ob eine Datei vorhanden ist und gelöscht werden kann. Ich habe Echo-Befehle hinzugefügt, die beim Debuggen eines solchen Skripts hilfreich sind.

@echo off if exist \path\to\lockfile ( echo lockfile exists del \path\to\lockfile if exist \path\to\lockfile ( echo lockfile is locked - program is running ) else ( echo lockfile was deleted - program is not running **launch program here** ) ) else ( echo lockfile doesn't exist - program is not running **launch program here** ) 

Um das Programm zu schließen, ohne dass es wie bei der Wartung automatisch gestartet wird, deaktivieren Sie die Planung der Stapeldatei.

Wenn dies zu viel Mühe macht, fügen Sie eine weitere Datei mit dem Namen "maintenance" hinzu und prüfen Sie, ob sie in der Batchdatei vorhanden ist. Löschen Sie die Datei, wenn die Wartung beendet ist.

Zum Testen kann man die Datei über dieses Batch-Skript sperren. Drücken Sie eine beliebige Taste, um zu stoppen:

pause 2 >> \path\to\lockfile 

Verweise :

Ich werde es testen und so schnell wie möglich ein Feedback geben Divin3 vor 8 Jahren 0
Ich sehe das auch als die beste Lösung. Ich habe ein Problem, dem ich begegnet bin. Ich muss die Batchdatei im Hintergrund laufen lassen. Es darf nicht einmal für einen Blitz den Fokus stehlen, da das Scannen möglicherweise unterbrochen wird. Die beste Lösung, die ich bisher gefunden habe, war "% comspec% / c start" "/ min\ file.bat ^ & exit`, aber es ist immer noch nicht so, wie es funktionieren sollte. Divin3 vor 8 Jahren 0
Siehe diesen Thread: [Batchdatei vollständig versteckt ausführen] (http://superuser.com/questions/62525/run-a-batch-file-in-a-completely-hidden-way/62646#62646) . harrymc vor 8 Jahren 0
Ich bin etwas enttäuscht, weil es keinen "Windows-Hack" gibt, der die Hotkeys als ursprüngliche Idee funktionieren lässt, aber dies ist eine großartige Lösung. Zum Schluss habe ich mich entschlossen, 2 Batchdateien im Startmenü zu erstellen, die den Taskplaner aktivieren / deaktivieren und das Skript von einer Netzwerkfreigabe aus laden wird. Ich muss einige Fehlerbehandlung hinzufügen (falls auf die Datei nicht zugegriffen werden kann oder Probleme auftreten), aber ich kann damit umgehen. Vielen Dank für Ihre Mühe und die tolle Antwort. Divin3 vor 8 Jahren 0
0
root

Ihr Ansatz für dieses Problem ist einzigartig und klingt nah, aber es läuft Ihnen zu. Wenn Sie auf dem gleichen Weg nachdenken, den Sie bisher verfolgt haben, finden Sie hier ein Angebot.

Wenn dies sicher ist, was Sie gründlich bestimmen müssen, möchten Sie möglicherweise eine Tastenkombination für Alt + F4 der Anwendungen verwenden. Noch besser wäre es, wenn Sie zuerst Alt + Tab, dann Alt + F4 kombinieren könnten. Theoretisch können Sie beide Anwendungen schließen und zum Desktop zurückkehren, indem Sie diese Tastenkombination maximal dreimal drücken.

Dies würde Sie in eine Position versetzen, in der Sie den genauen Status beider Anwendungen kennen - nicht laufen. Mit einer überarbeiteten Version Ihrer Bindung können Sie dann Ihre Anwendungen starten (Sie müssen nicht mehr prüfen, ob sie ausgeführt werden).

Beispiel (beide Anwendungen laufen):

  • Anwendung Ahat Fensterfokus
  • [press bind] Bhat den Fokus und wird geschlossen, der Fokus wird wieder angezeigtA
  • [Pressbindung] desktophat den Fokus und nichts schließt sich
  • [press bind] Ahat den Fokus und wird geschlossen

Beispiel 2 ( Bwurde abgeschlossen):

  • desktop hat Fensterfokus
  • [press bind] A(zum Beispiel) hat den Fokus und wird geschlossendesktop

Alternativ können Sie auch eine Taste für Alt + Tab und eine weitere Taste für Alt + F4 verwenden. Die Benutzer müssten die Taste 1gefolgt von der Taste drücken 2, um insgesamt drei Mal für jede Taste zu drücken.

Es liegt an Ihnen, zu bestimmen, ob Alt + F4ing für Ihre Anwendungen sicher ist. Man könnte annehmen, dass dies niemals sicher ist, aber es ist absolut nicht sicher, wenn Ihre Anwendungen Daten aktiv verarbeiten, Daten basierend auf einem Zeitplan verarbeiten, eine aktive Datenbankverbindung haben, ect. Wenn die Anwendungen ihre Funktion (en) nur dann ausführen, wenn ein Benutzer in eine Anforderung eingreift, und Alt + F4ing für jede Anwendung keine unvorhergesehenen temporären Daten oder Sperren hinterlässt, kann dies keine Folgen haben.

Wie immer gibt es mehrere Ansätze für Ihr Problem. Diese spezifische Lösung bleibt bei Ihrem anfänglichen Denkprozess und Ihrem Gesamtthema erhalten.

Es ist nicht sicher, die Apps während der Ausführung zu deaktivieren, da dies zu noch größeren Problemen führen kann. Die Anwendungen werden auch nicht geschlossen, wenn "alt + f4" gedrückt wird. Anwendung 'A' fordert sogar zum Schließen eines Kennworts auf. Divin3 vor 8 Jahren 0