Forum: PC-Programmierung . exe im hintergrund ausführen


von ProblemBär (Gast)


Lesenswert?

Hallo Leute.

Ich hab mir eie kleines Programm in C++ geschrieben, was nichts weiter 
macht als ständig Werte ausm PC auszulesen und diese über RS232 an einen 
uC zu schicken. Es funktioniert auch wunderbar, nur nervt es mich, dass 
immer die Eingabeaufforderung dabei geöffnet bleibt. Kann man dies 
irgendwie umgehen, so dass das Programm nur im Hintergund läuft?

von ProblemBär (Gast)


Lesenswert?

Hat denn keiner ne Idee? Oder wie man die Konsole vieleicht rechts unten 
in die Taskleiste schieben kann, sozusagen minimieren?

von Daniel R. (Gast)


Lesenswert?


von Uhu U. (uhu)


Lesenswert?

Versuchs mal mit der start-Anweisung aus einem .bat-File.
Dokumentation in der XP-Hilfe: start dann unter Full-text matches nach 
Start gucken...

von Mark .. (mork)


Lesenswert?

Du kannst ja versuchen, das Programm als Win API Anwendung zu 
kompillieren, dann wird kein Konsolefenster erzeugt.

MfG Mark

von noch ein gast (Gast)


Lesenswert?

Das Programm kann auch über eine der Win32-API-Funktionen 
(AllocConsole/FreeConsole ect.) die verwendete Konsole freigeben - nur 
wird es dann etwas schwer, das Programm zu steuern, weil ja nichts mehr 
da ist, wo man draufklicken kann und auch nichts mehr da ist, dem man 
per Tastatur mitteilen kann, daß es aufhören so..

Besser wäre es, das Programm als Dienst zu implementieren ("Service"), 
das aber erfordert schon etwas mehr Programmierkenntnisse. Dienste sind 
unsichtbare Prozesse (unix-speak "daemon"), die im Hintergrund laufen 
und sich auch nicht beenden, wenn sich der Benutzer abmeldet. Über den 
Dienstmanager (services.msc) können Dienste gesteuert werden.

von Uhu U. (uhu)


Lesenswert?

@noch ein gast

Windows kann das doch - was gibst du da für unsinnige Tipps?

von noch ein gast (Gast)


Lesenswert?

Windows kann was doch? Inwiefern soll mein Tip unsinnig sein?

von Uhu U. (uhu)


Lesenswert?

noch ein gast wrote:
> Windows kann was doch? Inwiefern soll mein Tip unsinnig sein?

Beitrag "Re: exe im hintergrund ausführen"

Auf die Schnelle:

- öffne eine DOS-Box
- tippe

   start /?

dann siehst du, was der doofe cmd.exe alles kann, was aber kaum einer 
weiß...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die ursprüngliche Frage war:
1
Es funktioniert auch wunderbar, nur nervt es mich, 
2
dass immer die Eingabeaufforderung dabei geöffnet bleibt. 
3
Kann man dies irgendwie umgehen, so dass das Programm 
4
nur im Hintergund läuft?

Da hilft auch die Verwendung von start nicht, denn auch da bleibt das 
Konsolenfenster der Applikation immer geöffnet.

Daß der Threadstarter das geöffnete Konsolenfenster 
("Eingabeaufforderung", von manchen fälschlicherweise als "DOS-Box" 
bezeichnet) selber in die Taskleiste minimieren kann und auch den Focus 
auf ein anderes Fenster setzen kann, sollten wir ihm schon zutrauen.

von Uhu U. (uhu)


Angehängte Dateien:

Lesenswert?

Ok, war wirklich nichts mit start. Versuchs mal damit:

    var Shell = new ActiveXObject("WScript.Shell");
    Shell.Run('notepad.exe', 0);

Schreib die zwei Zeilen in eine Datei mit Endung .js und führ die aus.

Das Skript terminiert sofort, während notepad nur noch im Taskmanager zu
sehen, bzw. zu killen ist...

Im Anhang ein kleines Helferlein, mit dem man jede Applikation in den 
Hintergrund verbannen kann.

von Outi O. (outlaw)


Lesenswert?

Normalerweise kann man in den Eigenschaften die Eingabeaufforderung 
wieder schlißen lassen. Dabei müsstest Du im Prinzip nur ne Verknüpfung 
erstellen, dort konfigurieren und dann das Programm über diese 
Verknüpfung ausführen.

Ich bemutze diese Vorgehensweise z.B. bei meinen 
Datensicherungsbatschdateien, bei denen mich auch anfangs immer genervt 
hat, dass die Eingabeaufforderung offen geblieben ist.

Klappt seit Jahren und verscheidenen Windowsversionen einwandfrei.

von Jupp (Gast)


Lesenswert?

Mit Notepad funktioniert das Skript, mit dem Rechner (calc.exe) 
komischerweise nicht. 'Ne Ideem warum?

von Uhu U. (uhu)


Lesenswert?

Jupp wrote:
> Mit Notepad funktioniert das Skript, mit dem Rechner (calc.exe)
> komischerweise nicht. 'Ne Ideem warum?

Der wird sich selbst restoren.

von Schnuffi (Gast)


Lesenswert?

Huhu Gibt es da auch eine Möglichkeit den Prozess wieder hervorzuholen, 
ohne dass ein neuer Prozess gestartet wird?

Lieber Gruss

von Uhu U. (uhu)


Lesenswert?

Ich würde mal vermuten, das geht, indem man ihm die Message zum restoren 
schickt. Aber dazu braucst du natürlich irgend ein Vehikel, das das 
macht...

Der Taskmanager kanns jedenfalls nur, wenn der Prozeß im ersten Tab 
aufgelistet ist - aber das sollte ja gerade verhindert werden.

Ich versenke mit dieser Methode nur Teile, die ich definitiv - außer in 
der Prozeßliste - nicht sehen will, wie SSL-Tunnels.

von Schnuffi (Gast)


Lesenswert?

Hum...ok..danke...ja bin auf der Suche danach, aber wird wohl noch recht 
kompliziert sein...

von erob (Gast)


Lesenswert?

>Mit Notepad funktioniert das Skript, mit dem Rechner (calc.exe)
>komischerweise nicht. 'Ne Ideem warum?

hi,

genau das problem habe ich auch...

bei mir kommt ne meldung:

Skript: [verzeichnis]
Zeile: 2
Zeichen: 1
Fehler: Das System kann die angegebene Datei nicht finden.
Code: 80070003
Quelle: (null)

ich verstehe nicht warum die datei (programm) nicht gefunden werden 
kann?
der Pfad ist auf jedenfall richtig eingegeben!

need help
thx

von Uhu U. (uhu)


Lesenswert?

Was steht denn bei dir in Zeile 2? Poste am besten das ganze Skript.

von erob (Gast)


Lesenswert?

Hi,
1
var Shell = new ActiveXObject("WScript.Shell");
2
Shell.Run('Laufwerköffner Programm.exe', 0);

Das Programm liegt im selben Verzeichnis wie das Programm notepad.exe 
(C:\windows).
Mit notepad.exe funktioniert es!

mfg

von Uhu U. (uhu)


Lesenswert?

erob wrote:
> Hi,
>
>
1
> var Shell = new ActiveXObject("WScript.Shell");
2
> Shell.Run('Laufwerköffner Programm.exe', 0);
3
>
>
> Das Programm liegt im selben Verzeichnis wie das Programm notepad.exe
> (C:\windows).
> Mit notepad.exe funktioniert es!
>
> mfg

Dann gib den Pfad vollständig an! Aber Achtung: \ hat in JS-Strings 
dieselbe Funktion wie in C. Du mußt sie entweder verdoppeln, oder 
einfach durch / ersetzen. Und weil Blanks im Pfad vorkommen, ist es eine 
gute Idee, den ganzen Pfad nochmal in " einzuschließen:

   Shell.Run('"c:/windows/Laufwerköffner Programm.exe"', 0);

anderenfalls würde versucht, c:/windows/Laufwerköffner mit dem Parameter 
Programm.exe zu starten.

Faustregel: Vermeide Leerzeichen in Pfaden, wenn du böse Überraschungen 
vermeiden willst...


Nachtrag: Evenuell funktioniert es auch so - ich habs aber nicht 
probiert:

   Shell.Run('"Laufwerköffner Programm.exe"', 0);

von erob (Gast)


Lesenswert?

Vielen Dank!!!!It WORKS!!!!

Endlich hats geklappt ich war schon fast am verzweifeln :D!!!
also dann mach ich mich ma gleich an die Arbeit mein Programm zu 
perfektionieren ^^.....

Mfg Erob

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.