2010-08-23 3 views
0

J'ai un programme de service de fenêtre et j'ai besoin de démarrer un autre exécutable, mais aucune des fonctions ne sont exécutées dans SvcMain. J'ai cherché la solution, mais trouvé quelque part écrit que l'initialisation devrait être achevée en moins d'une seconde ou sinon il ne sera pas exécuté createprocess ils disent que pour cela fonctionne, vous devez définir SetServiceStatus à , mais je ne peux pas trouver un document pour l'illustrer. Comment puis-je faire ceci?comment puis-je exécuter à partir du service

+0

Si c'est pour Windows, et il semble qu'il en soit ainsi, merci de le marquer comme tel. –

Répondre

0

Essayez d'exécuter un thread secondaire à partir de SvcMain et laissez ce thread effectuer le travail de démarrage de l'exécutable externe.

+0

dois-je signaler l'état chaque fois du fil secondaire ??? – user428447

+0

Peut-être que j'ai mal compris vos besoins. Vous pouvez les décrire plus en détail dans vos questions originales afin que les gens comprennent exactement ce que vous essayez de faire. – joekoyote

0

Fondamentalement, c'est aussi simple que cela puisse paraître. Avant d'appeler le CreateProcess, créez un objet SERVICE_STATUS, définissez le SERVICE_STATUS.dwCurrentState sur SERVICE_START_PENDING et appelez le SetServiceStatus(handle_to_your_service, &the_service_status);.

Il est probablement plus facile de rendre l'objet SERVICE_STATUS global. Vous appelez le SetServiceStatus plus d'une fois, et la plupart des membres resteront constants au fil du temps. Par exemple. .dwServiceType ne devrait pas changer du tout, et .dwControlsAccepted ne le fait généralement pas.

Questions connexes