Oppure

Loading
20/09/15 23:23
Roby94
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
	partial class Service
	{
		protected static TransactedInstaller InitializeInstall()
		{
			ServiceProcessInstaller serviceProcessInstaller = new ServiceProcessInstaller();
			ServiceInstaller serviceInstaller = new ServiceInstaller();
			TransactedInstaller transactedInstaller = new TransactedInstaller();

			serviceProcessInstaller.Account = ServiceAccount.LocalSystem;
			serviceProcessInstaller.Password = null;
			serviceProcessInstaller.Username = null;

			serviceInstaller.Description = "aaaaa";
			serviceInstaller.DisplayName = "bbbbb";
			serviceInstaller.ServiceName = "ccccc";
			serviceInstaller.StartType = ServiceStartMode.Automatic;

			transactedInstaller.Context = new InstallContext("", new String[] { "/assemblypath=" + Assembly.GetExecutingAssembly().Location });
			transactedInstaller.Installers.AddRange(new Installer[] { serviceProcessInstaller, serviceInstaller });

			return transactedInstaller;
		}
        protected static void Install()
		{
			Service.InitializeInstall().Install(new Hashtable());
		}
		protected static void Unistall()
		{
			Service.InitializeInstall().Uninstall(null);
		}
	}

Richiamo questi metodi dal Main dello stesso servizio
public static void Main(string[] args)//Punto di ingresso del programma
		{
			if (args.Length != 0)//Verifico la presenza di argomenti
			{
				switch (args[0])
				{
					case "-i":
						try
						{
							Service.Install();//Installo il servizio
						}
						catch (Exception ex) { Service.WriteLog("Error: " + ex.ToString()); }
						break;
					case "-u":
						try
						{
							Service.Unistall();//Disinstallo il servizio
						}
						catch (Exception ex) { Service.WriteLog("Error: " + ex.ToString()); }
						break;
					case "-s":
						ServiceBase.Run(new Service());//Avvio il servizio
						break;
				}
			}
			else
			{
				//In caso non vi siano argomenti di avvio ne fornisco una lista
				Console.WriteLine("You need to start the executable with arguments.");
				Console.WriteLine("Usage: Service.exe [options]");
				Console.WriteLine("Options:");
				Console.WriteLine(" -i\tinstall the service");
				Console.WriteLine(" -u\tunistall the service");
			}
		}

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 20/09/15 23:24
aaa
28/09/15 0:10
pierotofy
Il mio blog: piero.dev
30/09/15 18:34
Roby94
Mhh non mi convince troppo, in ogni caso ci darò un occhiata più approfondita e proverò, ti faro sapere Piero ;)
Grazie mille.
aaa