. exe im hintergrund ausführen

Gast #791551
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?
Gast #792173
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.
Persönliche Seite #792953
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.
#794220
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.
Angehängte Dateien:
#798744
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.
#813128
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.
Gast #865199
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
Gast #866029
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
#866144
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);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren