Service startet kein Program



  • Moin moin liebe Comunity,
    Ich bin noch sehr neu hier und in C++ habe aber schon eine Monster aufgabe bekommen.

    Hier mein Problem:
    Ich durfte einen Dienst designen der ein Verzeichnis pollt und je nach Regel dann ein Programm auf die Dateien in dem Verzeichnis laufen lässt, z.b. eine txt Datei mit Notepad ausdrucken lässt. Soweit so gut, das einlesen der ganzen Sachen funzt auch, genauso wie die Auswertung allerdings spinnt mein ShellExecuteEx wirft mir immer einen Fehler ( Die Anwendung konnte nicht richtig initialisiert werden (0x0000142). Klicken sie Ok, um die Anwendung zu beenden.

    Ich habe den Service im localSystem Konto gestartet kann es daran liegen?
    Ich bin für jede Hilfe dankbar 🙂

    MfG Eye



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • <a href= schrieb:

    http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx">ERROR_DEVICE_NO_RESOURCES
    322 (0x142)
    The target device has insufficient resources to complete the operation.

    Klappt es wenn du das Programm manuell ausführst ?
    Wie genau rufst du es denn auf, und was macht es ?



  • Ich rufe das Programm mit:

    SHELLEXECUTEINFO sei;
    	ZeroMemory(&sei, sizeof(SHELLEXECUTEINFO));
    
    	sei.cbSize			= sizeof (SHELLEXECUTEINFO);
    	sei.lpVerb			= "open";
    	sei.lpFile			= "%SYSTEMROOT%\\SYSTEM32\\cmd.exe";
    	sei.lpParameters	= xSysParameters;
    	sei.nShow			= nShow;
    	sei.lpDirectory		= pxAction->xActionWorkingDir;
    	sei.fMask			= SEE_MASK_DOENVSUBST|SEE_MASK_NOCLOSEPROCESS;
    
    	// *******
    	// EXECUTE
    	// *******
    	BOOL bOK			= ShellExecuteEx (&sei);
    

    auf. In lpParameters steht dann z.b. /C notepad.exe /p "C:\ich\Neu Textdokument.txt"

    Wenn ich unter einem normalen User die CMD mit den Parametern ausführen lasse geht es ^^



  • Wenn ich mich recht erinnere, kann ein Service nicht auf die Konsole zugreifen ...
    Schlagt mich nicht, wenn das nicht stimmt, aber prüf das doch mal nach.


  • Mod

    Warum bitte CMD.EXE starten und daraus Notepad?
    Welcher Drucker soll denn bitte verwendet werden? Das ist Localsystem! Standarddrucker haben nur normale User Accounts.



  • Ich darf das nur Überarbeiten ist das erste 😛

    aber Ich glaube das die CMD benutzt wurde da einfach ein beliebiges Programm mit einem bestimmten Parameter ausgeführt werden soll. und so wie das Programm strukturiert ist war es so wie es aussieht das einfachste eine CMD zu starten und die Parameter (also den eigentlichen Programmstart) zu übergeben. Das mit dem drucken war auch nur ein Beispiel da es auch ohne /p nicht eght was nur notepad öffnen sollte

    Aber Ihr meint ich sollte das Programm mit den Parametern einfach direkt vom Service starten lassen?


  • Mod

    Was soll der Umweg über CMD.EXE bringen außer, dass Du CMD.EXE startest, dies das Notepad öffnet und sofort terminiert weil Notepad ein Windows Programm ist.

    Wenn Du wissen willst was aus dem NOTEPAD Aufruf wird müsstest Du Start /Wait verwenden.

    CMD.EXE hier einzubauen ist eigentlich sinnlos.



  • zur erklärung:
    das Programm soll wie gesagt ein beliebiges Verzeichnis pollen und alles darin mit einem beliebiegen Programm inklusive Parameter öffnen, ob nun Notepad oder irgendein anderes Programm soll halt beliebig bleiben. Und wie vorher schon gesagt hat das mit cmd die Übergabe nur einfacher gemacht da ich nur den CString als Parameter übergeben muss.

    Ergebnis:
    Ich sollte das Programm direkt starten lassen ohne cmd umweg und hoffen das das klappt? (wär etwas umbauarbeit deshalb frage ich vorher)



  • Leider schmeisst mir der Dienst auch mit direktem Start die Fehlermeldung


Log in to reply