Problema: Sto lavorando a un servizio che eseguirà alcune elaborazioni automatizzate in un orario configurabile ogni notte. Fa alcune comunicazioni su Internet, formatta alcune informazioni e crea un file. Questo file verrà utilizzato da un altro programma. Non voglio specificare quale programma è, perché ho firmato NDA e davvero non penso che sia importante per la domanda. Il mio problema è che non riesco a far funzionare questo programma dal servizio. Se eseguo il mio programma come normale applicazione per console, funziona perfettamente. Sto chiamando il programma esterno inviando un comando shell con il percorso dell'eseguibile e diversi parametri (per la configurazione di come verrà eseguito e il percorso del file che creo con il mio programma). Il mio comando è corretto, poiché verrà eseguito incollato in una shell di comandi o se il mio programma viene eseguito come applicazione di console.
Quello che ho provato: Chiamando il programma esterno direttamente dal mio servizio (sto usando C # e il metodo Process.Start, ma non è qui né lì. Sento che la mia domanda è più concettuale della mia specifica implementazione). Questo non fa nulla. Il programma che sto chiamando è impostato per l'esecuzione in modalità non presidiata (questo non ha alcuna interfaccia utente o altro). Ho provato a eseguire un file .bat con il comando e gli argomenti corretti anche dal mio servizio, senza fortuna (ho testato indipendentemente .bat). Il mio servizio è impostato per poter interagire con il desktop.
La mia domanda: Come posso ottenere un servizio di Windows per eseguire un programma esterno? Più genericamente, qual è la soluzione o il modello preferito da utilizzare quando si deve chiamare un altro processo da un servizio (Daemon in * nix-land)? Se dovessi essere in grado di chiamare il programma e il mio problema è specifico dell'implementazione, aprirò una domanda su StackOverflow. Ma mi piacerebbe sapere qual è l'approccio standard per questo problema.
So che questo è presumibilmente un cattivo progetto, perché c'è la possibilità che nessun utente abbia effettuato l'accesso. Ma il programma da eseguire non dovrebbe richiedere autorizzazioni speciali o preoccuparsi di quale utente è stato eseguito.
Non riesco a utilizzare l'Utilità di pianificazione poiché ciò era espressamente vietato nei requisiti a causa di problemi di affidabilità. Questo è in realtà il motivo per cui il programma viene eseguito come servizio in primo luogo anziché come attività pianificata.