Ho un'applicazione di servizio costruita in Delphi che funziona benissimo. Fa esattamente quello che voglio che faccia e tutto è felice. Tutto va bene finché non voglio eseguire due (o più) istanze di quel servizio su una singola macchina. Poiché il nome del servizio è codificato nel programma (tramite la proprietà Name del servizio), posso installare il servizio una sola volta su un dato computer. Se provo a modificare la proprietà Name in fase di esecuzione, il servizio non risponde a meno che la proprietà Name non sia impostata sulla stessa cosa impostata durante la fase di progettazione.È possibile installare più istanze della stessa applicazione di servizio delphi?
Ho fatto una soluzione per questo in cui ho tutto il codice che non interagisce direttamente con il gestore controllo servizi incapsulato in unità separate (s). Poi scrivo un progetto Delphi separato per ogni istanza che voglio del servizio che ha il codice sufficiente per lanciarsi e iniziare a eseguire il codice principale.
Questo metodo è, a mio parere, brutto ed è certamente inefficiente. Funziona bene per due istanze, ma poi abbiamo bisogno di un terzo e un quarto e ...
C'è un modo per modificare il mio codice in modo da avere un solo progetto Delphi che può installare ed eseguire se stesso come più istanze di servizio con qualche semplice input di runtime (es. flag della riga di comando)?
O forse una domanda più ampia: esiste una "via giusta" per raggiungere l'obiettivo?
Se si esegue questa operazione, il servizio non viene eseguito a meno che ParamStr (2) non sia uguale al valore impostato per Nome in Object Inspector nell'IDE. Se ParamStr (2) è diverso, quando il servizio viene avviato, entra in uno stato di "Avvio" perpetuo e non viene mai eseguito. –
Siamo spiacenti, questa è solo una parte di ciò che è necessario. Hai bisogno dell'evento OnStart per chiamare anche questo. (Lavorando dalla memoria qui!) –
Non riesco a trovare questo metodo ServiceLoadInfo che si sta utilizzando. È un metodo standard, o solo un suggerimento per scrivere un metodo che capisca quale nome viene chiamato in questa istanza? –