Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [Servizi]Metodo corretto per imporre paramentri in installazione servizio
Forum - C# / VB.NET - [Servizi]Metodo corretto per imporre paramentri in installazione servizio

Avatar
Roby94 (Member)
Guru


Messaggi: 1127
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 1:23
Lunedì, 21/09/2015
Buonanotte a tutto il forum, vi propongo un quesito che non mi blocca completamente ma mi aiuterebbe a rendere piu professionale un servizio.
Ho questo parte di classe per installare un servizio
Codice sorgente - presumibilmente C++

  1. partial class Service
  2.         {
  3.                 protected static TransactedInstaller InitializeInstall()
  4.                 {
  5.                         ServiceProcessInstaller serviceProcessInstaller = new ServiceProcessInstaller();
  6.                         ServiceInstaller serviceInstaller = new ServiceInstaller();
  7.                         TransactedInstaller transactedInstaller = new TransactedInstaller();
  8.  
  9.                         serviceProcessInstaller.Account = ServiceAccount.LocalSystem;
  10.                         serviceProcessInstaller.Password = null;
  11.                         serviceProcessInstaller.Username = null;
  12.  
  13.                         serviceInstaller.Description = "aaaaa";
  14.                         serviceInstaller.DisplayName = "bbbbb";
  15.                         serviceInstaller.ServiceName = "ccccc";
  16.                         serviceInstaller.StartType = ServiceStartMode.Automatic;
  17.  
  18.                         transactedInstaller.Context = new InstallContext("", new String[] { "/assemblypath=" + Assembly.GetExecutingAssembly().Location });
  19.                         transactedInstaller.Installers.AddRange(new Installer[] { serviceProcessInstaller, serviceInstaller });
  20.  
  21.                         return transactedInstaller;
  22.                 }
  23.         protected static void Install()
  24.                 {
  25.                         Service.InitializeInstall().Install(new Hashtable());
  26.                 }
  27.                 protected static void Unistall()
  28.                 {
  29.                         Service.InitializeInstall().Uninstall(null);
  30.                 }
  31.         }


Richiamo questi metodi dal Main dello stesso servizio
Codice sorgente - presumibilmente C++

  1. public static void Main(string[] args)//Punto di ingresso del programma
  2.                 {
  3.                         if (args.Length != 0)//Verifico la presenza di argomenti
  4.                         {
  5.                                 switch (args[0])
  6.                                 {
  7.                                         case "-i":
  8.                                                 try
  9.                                                 {
  10.                                                         Service.Install();//Installo il servizio
  11.                                                 }
  12.                                                 catch (Exception ex) { Service.WriteLog("Error: " + ex.ToString()); }
  13.                                                 break;
  14.                                         case "-u":
  15.                                                 try
  16.                                                 {
  17.                                                         Service.Unistall();//Disinstallo il servizio
  18.                                                 }
  19.                                                 catch (Exception ex) { Service.WriteLog("Error: " + ex.ToString()); }
  20.                                                 break;
  21.                                         case "-s":
  22.                                                 ServiceBase.Run(new Service());//Avvio il servizio
  23.                                                 break;
  24.                                 }
  25.                         }
  26.                         else
  27.                         {
  28.                                 //In caso non vi siano argomenti di avvio ne fornisco una lista
  29.                                 Console.WriteLine("You need to start the executable with arguments.");
  30.                                 Console.WriteLine("Usage: Service.exe [options]");
  31.                                 Console.WriteLine("Options:");
  32.                                 Console.WriteLine(" -i\tinstall the service");
  33.                                 Console.WriteLine(" -u\tunistall the service");
  34.                         }
  35.                 }


Ora come potete notare il servizio viene avviato mediante argomento "-s" vorrei installare il servizio con questo paramento di avvio. Immagino che dovrò andare ad aggiungere un parametro ad InstallContext ma non riesco a trovare un elenco di questi parametri, mi sapreste aiutare?
Grazie mille.

PS non riesco piu a trovare il modo per ottenere il nome dell'eseguibile del programma senza path, Location delle informazioni assembly ritorna tutta la path. Vi ricordate come si fa?

Ultima modifica effettuata da Roby94 il 21/09/2015 alle 1:24


La programmazione è arte... fa che i tuoi script siano degni di un museo.
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6106
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 2:10
Lunedì, 28/09/2015


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1127
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 20:34
Mercoledì, 30/09/2015
Mhh non mi convince troppo, in ogni caso ci darò un occhiata più approfondita e proverò, ti faro sapere Piero ;)
Grazie mille.


La programmazione è arte... fa che i tuoi script siano degni di un museo.
PM Quote