Problem mit CreateProcess im Dienstprogramm unter Win7

28/11/2011 - 16:09 von Frank Kessel | Report spam
Hallo,

ich habe folgende Konstellation (Dev-IDE: VS2010):

Mein selbstprogrammierter Dienst (angemeldet mit Systemkonto) soll per
CreateProcess ein Programm (setup.exe) anstarten. Bisher lief dies
über Jahre hinweg unter WinXP fehlerfrei.

Jetzt unter Win7 aber passiert scheinbar gar nichts, d.h. das
setup.exe wird scheinbar nicht gestartet.

Nach eingehender Analyse ergibt sich folgendes Bild:

a) CreateProcess() liefert TRUE zurück, also wurde der Prozess
prinzipiell erzeugt und es ist dabei kein Fehler aufgetreten.
b) Wenn ich nach dem Startversuch versuche, die Datei setup.exe
manuell zu löschen, bekomme ich eine Fehlermeldung, dass die Datei im
Zugriff ist.
c) Erst wenn ich den Dienst anhalte, kann ich die setup.exe löschen.
d) Wenn ich die setup.exe von Hand starte, làuft es, fragt aber
zuerst, ob ich es zulassen will, dass das Programm Daten veràndert.

Für mich sieht es so aus, als ob das setup.exe zwar gestartet wird,
aber scheinbar "im Hintergrund" (also nicht sichtbar) auf eine Eingabe
wartet (wie bei d). Das würde alles zu der zuvor beschriebenen Liste
von Symptomen passen.

Frage 1: Ist meine Vermutung richtig?
Frage 2 (viel wichtiger): Was kann ich machen, damit das reibungslose
Starten vom Dienst aus wieder funktioniert?

Hier zur Info der Aufruf von CreateProcess():

STARTUPINFO startUpInfo = {sizeof(STARTUPINFO),NULL,"",NULL,
0,0,0,0,0,0,0,STARTF_USESHOWWINDOW,0,0,NULL,0,0,0};
PROCESS_INFORMATION ProcInfo;
...
BOOL b CreateProcess(NULL,pCommandLine,NULL,NULL,TRUE,NORMAL_PRIORITY_CLASS,NULL,pWorkingDir,&startUpInfo,&ProcInfo);

Irgendeiner eine Idee?

Vielen Dank für eure Hilfe!

Gruß Frank
 

Lesen sie die antworten

#1 Ulrich Eckhardt
28/11/2011 - 16:41 | Warnen spam
Am 28.11.2011 16:09, schrieb Frank Kessel:
Mein selbstprogrammierter Dienst (angemeldet mit Systemkonto) soll per
CreateProcess ein Programm (setup.exe) anstarten. Bisher lief dies
über Jahre hinweg unter WinXP fehlerfrei.

Jetzt unter Win7 aber passiert scheinbar gar nichts, d.h. das
setup.exe wird scheinbar nicht gestartet.

Nach eingehender Analyse ergibt sich folgendes Bild:

a) CreateProcess() liefert TRUE zurück, also wurde der Prozess
prinzipiell erzeugt und es ist dabei kein Fehler aufgetreten.
b) Wenn ich nach dem Startversuch versuche, die Datei setup.exe
manuell zu löschen, bekomme ich eine Fehlermeldung, dass die Datei im
Zugriff ist.
c) Erst wenn ich den Dienst anhalte, kann ich die setup.exe löschen.
d) Wenn ich die setup.exe von Hand starte, làuft es, fragt aber
zuerst, ob ich es zulassen will, dass das Programm Daten veràndert.

Für mich sieht es so aus, als ob das setup.exe zwar gestartet wird,
aber scheinbar "im Hintergrund" (also nicht sichtbar) auf eine Eingabe
wartet (wie bei d). Das würde alles zu der zuvor beschriebenen Liste
von Symptomen passen.

Frage 1: Ist meine Vermutung richtig?



Ich vermute ja. Ich bin mir nicht 100% sicher, aber ich glaube seit
irgendwann nach XP ist MS Windows Multi-User-faehig geworden, d.h. es
koennen mehrere Desktop-Sessions gleichzeitig laufen (wie auch unter
Unix und aehnlichen Systemen). Dienste bekommen dann ihren eigenen
virtuellen Desktop der allerdings nirgends angezeigt wird.


Frage 2 (viel wichtiger): Was kann ich machen, damit das reibungslose
Starten vom Dienst aus wieder funktioniert?



Wie gesagt, das Starten ist nicht das Problem, was Du u.U. einfach
ueberpruefen kannst. Das Problem ist, dass das Executable ein Popup
anzeigt welches niemand jemals sehen wird, also schlicht nicht fuer
einen Aufruf innerhalb eines Dienstes geeignet ist. Gleiches gilt z.B.
fuer Deinen Dienst selbst, der darf auch keine Popups anzeigen.

Eventuell kannst Du mit entsprechenden Parametern das Ding ruhigstellen?

Uli

Ähnliche fragen