Esempio n. 1
0
 protected override void Dispose(bool disposing)
 {
     base.Dispose(disposing);
     if (null != _serviceInstaller)
     {
         _serviceInstaller.Dispose();
     }
     if (null != _serviceProcessInstaller)
     {
         _serviceProcessInstaller.Dispose();
     }
 }
        /// <summary>
        /// Releases unmanaged and - optionally - managed resources.
        /// </summary>
        /// <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (ServiceInstaller != null)
                {
                    ServiceInstaller.Dispose();
                    ServiceInstaller = null;
                }

                if (ServiceProcessInstaller != null)
                {
                    ServiceProcessInstaller.Dispose();
                    ServiceProcessInstaller = null;
                }

                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose(disposing);
        }
        internal static void installService()
        {
            ServiceInstaller        serviceInstaller        = null;
            ServiceProcessInstaller serviceProcessInstaller = null;
            Installer           projectInstaller            = null;
            TransactedInstaller transactedInstaller         = null;

            try
            {
                serviceInstaller             = new ServiceInstaller();
                serviceInstaller.ServiceName = "OpenVPNManager";
                serviceInstaller.StartType   = ServiceStartMode.Automatic;

                serviceProcessInstaller          = new ServiceProcessInstaller();
                serviceProcessInstaller.Account  = System.ServiceProcess.ServiceAccount.LocalSystem;
                serviceProcessInstaller.Password = null;
                serviceProcessInstaller.Username = null;

                projectInstaller = new Installer();
                projectInstaller.Installers.Add(serviceInstaller);
                projectInstaller.Installers.Add(serviceProcessInstaller);

                transactedInstaller = new TransactedInstaller();
                transactedInstaller.Installers.Add(projectInstaller);
                transactedInstaller.Context = new InstallContext();
                transactedInstaller.Context.Parameters["assemblypath"] = Assembly.GetExecutingAssembly().Location + "\" \"/EXECUTESERVICE";
                transactedInstaller.Install(new Hashtable());
            }
            catch (InvalidOperationException e)
            {
                if (e.InnerException != null && e.InnerException is Win32Exception)// Probably: "Service already exists."
                {
                    MessageBox.Show("Error: " + e.InnerException.Message);
                }
                else if (e.InnerException != null && e.InnerException is InvalidOperationException && e.InnerException.InnerException != null && e.InnerException.InnerException is Win32Exception)// Probably: "Permission denied"
                {
                    String MSG_ServiceInstallPermissionErrorAdvice = Program.res.GetString("MSG_ServiceInstallPermissionErrorAdvice");
                    MessageBox.Show("Error: " + e.InnerException.InnerException.Message + "\r\n\r\n" + MSG_ServiceInstallPermissionErrorAdvice);
                }
                else
                {
                    throw;
                }
            }
            finally
            {
                if (serviceInstaller != null)
                {
                    serviceInstaller.Dispose();
                }
                if (serviceProcessInstaller != null)
                {
                    serviceProcessInstaller.Dispose();
                }
                if (projectInstaller != null)
                {
                    projectInstaller.Dispose();
                }
                if (transactedInstaller != null)
                {
                    transactedInstaller.Dispose();
                }
            }
        }