mikrocontroller.net

Forum: PC-Programmierung Mausklick in DOS-Box, stoppen verhindern


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Joachim D. (Firma: JDCC) (scheppertreiber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

Problem: Ein Programm läuft in einer DOS-Box (Win7/XP) und wickelt
selbstständig den Mailverkehr ab. Leider nur bis einer draufschaut
und in die DOS-Box klickt. Dann steht es.

Kann man das irgendwie abschalten ?

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Du meinst keine "DOS-Box", sondern ein Kommandozeilenfenster.


Das Programm sollte auf Mausevents in der Konsole reagieren, siehe dazu 
https://docs.microsoft.com/en-us/windows/console/reading-input-buffer-events

Für Programme, die zuverlässig im Hintergrund arbeiten sollen und keine 
Benutzerinteraktion vorsehen, ist seit über zwei Jahrzehnten unter 
ernstgemeinten Windows-Versionen das Konzept des Dienstes (Service) 
vorgesehen, solche Programme laufen auch dann, wenn kein Benutzer 
angemeldet ist.

Was macht das Programm besonderes, daß nicht ein herkömmlicher 
Mailserver verwendet werden kann, der das Dienst-Konzept umsetzt?

(Ein Beispiel für einen guten, freien und stabilen Mailserver, der unter 
Windows läuft, ist hmailserver)

Autor: nur zufällig hier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sicher das das Programm stehenbliebt und nicht nur die Meldungen 
aufhören selbständig zu scrollen?

Prinzipiell hat der Vorposter Recht, so etwas sollte ein Service sein. 
Aber man hat ja nicht immer Einfluss darauf.

Ich erinnere mich mal ein Tool von Microsoft genutzt zu haben was es 
ermöglicht jedes Programm als Service laufen zu lassen.
Wenn das auch heutzutage noch funktioniert wäre das evtl. auch ein 
Versuch Wert. Dann könnte das Problem unter einem eigenen Nutzer 
ungestört ablaufen. Allerdings könnte man dann die Konsolenausgaben 
nicht mehr sehen.

Autor: Joachim D. (Firma: JDCC) (scheppertreiber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Programm steht als man-in-the-middle und archiviert
die durchgehenden Mails. Abgesichert mit OpenSSL.

Danke für den Link - ich denke da komme ich weiter ;)

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nur zufällig hier schrieb:
> Ich erinnere mich mal ein Tool von Microsoft genutzt zu haben was es
> ermöglicht jedes Programm als Service laufen zu lassen.
> Wenn das auch heutzutage noch funktioniert wäre das evtl. auch ein
> Versuch Wert.

Das gibt es nach wie vor (srvany.exe), aber es gibt auch viele andere 
Alternativen dazu.

Man kann das betreffende Programm auch mit dem Windows-Taskplaner in 
einem anderen Benutzerkontext laufen lassen, dann bekommt man auch 
nichts davon mit.

Das Problem bei solchen Ansätzen ist aber immer das Beenden, da kein 
sauberer Weg zur Signalisierung eines Beenden-Wunsches vorhanden ist. 
Dienste sind mit dem SCM (service control manager) verbunden und können 
über diese Schnittstelle Steuerereignisse empfangen (die z.B. mit "net 
stop servicename" ausgelöst werden können).

Interaktive Programme beendet man mit Mausklicks oder Tastatureingaben, 
wenn aber das interaktive Programm in einer nicht zugänglichen 
alternativen Benutzersitzung läuft, lassen sich Mausklicks und 
Tastatureingaben logischerweise nicht verwenden.

Am sinnvollsten dürfte für das betreffende Programm tatsächlich die 
Implementierung der Dienst-Schnittstelle sein; je nach verwendeter 
Programmierschnittstelle gibt es dafür auch einfach zu nutzende fertige 
Werkzeuge, so daß die Interaktion mit dem SCM nicht unbedingt über die 
Win32-API erfolgen muss.

Autor: Schlumpf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit sx kann man einen cmd ohne Fenster starten:
B    Start application without creating a new window.

Oder mit cmdow das Fenster "verstecken"...

Autor: Schlumpf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
P.S.: sx heisst eigentlich StartX

Autor: Dr. Sommer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim Kompilieren der Anwendung kann man ein Flag setzen welches die .exe 
als Windows-Anwendung markiert (-mwindows bei MinGW) was letztendlich 
nur ein Bit im PE Header setzt. Dann öffnet Windows kein 
Konsolen-Fenster für das Programm, und es läuft unsichtbar. Als Dienst 
wäre allerdings deutlich sauberer.

Autor: Joachim D. (Firma: JDCC) (scheppertreiber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte beobachten was das Programm so treibt.
Bei einem Service dürfte das nicht so einfach gehen.
Deshalb ist "unsichtbar" nicht so das gelbe vom Ei.

Die Chose läuft später eh auf einem eigenen Rechner,
draufschalten kann man sich mit VNC (kicken, reinklicken
und unser BWLer merkt nich was er da angerichtet hat ;)

Autor: Dr. Sommer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joachim D. schrieb:
> Bei einem Service dürfte das nicht so einfach gehen.

Im simpelsten Fall einfach die Ausgaben in eine Datei schreiben. Windows 
bietet ja selber auch Logging Funktionen auch für Services...

Autor: c-hater (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
nur zufällig hier schrieb:

> Prinzipiell hat der Vorposter Recht, so etwas sollte ein Service sein.
> Aber man hat ja nicht immer Einfluss darauf.

Doch hat man. Auf jeden Fall, wenn es ein "reines" Konsolenprogramm ist, 
denn dann kann man daraus mit absoluter Sicherheit unter Verwendung von 
srvany einen Dienst machen.

> Ich erinnere mich mal ein Tool von Microsoft genutzt zu haben was es
> ermöglicht jedes Programm als Service laufen zu lassen.

Das isses. Nur leider stimmt es nicht, dass man wirklich jedes Programm 
damit als Dienst laufen lassen kann. Nur für reine Konsolenprogramme 
kann das garantiert werden und auch MS garantiert das nur eben genau 
dafür. Für alle anderen Programme KANN es funktionieren (das ist sogar 
relativ wahrscheinlich), muss aber eben nicht und ist deswegen auch 
nicht garantiert.

Das Problem ist nur: es ist für einen Laien garnicht so einfach zu 
erkennen, ob man es mit einem "reinen" Kommandozeilenprogramm zu tun 
hat. Die Tatsache, das es kein sichbares Fenster anzeigt und sich über 
die Konsole starten läßt und auch Ausgaben dort tätigt, ist leider kein 
auch nur annähernd hinreichendes Kriterium...

Autor: Joachim D. (Firma: JDCC) (scheppertreiber)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
c-hater schrieb:
> Das Problem ist nur: es ist für einen Laien garnicht so einfach zu
> erkennen, ob man es mit einem "reinen" Kommandozeilenprogramm zu tun
> hat.

Es ist definitv ein reines Konsolenprogramm, ich hab's ja
selbst geschrieben ... ;)

Autor: nur zufällig hier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja, dann kannst du doch auch nen Service draus machen und ein korrektes 
Logging implementieren.

Autor: georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joachim D. schrieb:
> Ich möchte beobachten was das Programm so treibt.
> Bei einem Service dürfte das nicht so einfach gehen

Joachim D. schrieb:
> Es ist definitv ein reines Konsolenprogramm, ich hab's ja
> selbst geschrieben ... ;)

Dann ist das ja kein Problem. Am saubersten ist, die Arbeit als Service 
zu programmieren und dazu ein Frontend als Windowsprogramm, dass die 
Tätigkeiten anzeigt und Befehle für Start und Stop an den Service senden 
kann. Dieses Frontend kann man beenden, wenn man es nicht braucht, 
während der Service weiterläuft.

Joachim D. schrieb:
> Ich möchte beobachten was das Programm so treibt.

Und das musst du wirklich ununterbrochen 24 Stunden am Tag??

Georg

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hängt das Stoppen mit dem Markierungsmodus zusammen? Bei 
Powershellskripten hab ich das Problem beim Reinklicken auch. Da steht 
dann "Markieren" oder "Auswahl" in der Titielleiste. Mit Enter 
(Kopieren) geht es dann weiter.
Zumindest für das normale Eingabefenster sollte sich das in den 
Einstellungen deaktivieren lassen. Markieren muss man dann via 
Kontextmenü manuell aktivieren.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.