| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | using System.Collections;using System.ComponentModel;using System.Configuration.Install;using System.IO;using System.Security.Principal;using System.ServiceProcess;namespace PRSServer{    [RunInstaller(true)]    public class PRSInstaller : Installer    {        private readonly ServiceProcessInstaller _proc;        private readonly ServiceInstaller _svc;        public PRSInstaller()        {            _proc = new ServiceProcessInstaller();            _svc = new ServiceInstaller { StartType = ServiceStartMode.Automatic };            Installers.Add(_svc);            Installers.Add(_proc);        }        protected override void OnBeforeInstall(IDictionary savedState)        {            var username = Context.Parameters["/username"];            if (string.IsNullOrWhiteSpace(username))            {                _proc.Account = ServiceAccount.LocalSystem;                _proc.Username = WindowsIdentity.GetCurrent().Name;            }            else            {                _proc.Account = ServiceAccount.User;                _proc.Username = username;                _proc.Password = Context.Parameters["/password"] ?? "";            }            _svc.ServiceName = Context.Parameters["/name"];            _svc.DisplayName = Context.Parameters["/displayName"];            _svc.Description = Context.Parameters["/description"];            // Change to .exe because .NET creates and runs .dll            Context.Parameters["assemblypath"] =                "\"" + Path.ChangeExtension(Context.Parameters["assemblypath"], "exe") + "\" /service=" + _svc.ServiceName;            base.OnBeforeInstall(savedState);        }        protected override void OnBeforeUninstall(IDictionary savedState)        {            _svc.ServiceName = Context.Parameters["/name"];            // Change to .exe because .NET creates and runs .dll            Context.Parameters["assemblypath"] =                "\"" + Path.ChangeExtension(Context.Parameters["assemblypath"], "exe") + "\" /service=" + _svc.ServiceName;            base.OnBeforeUninstall(savedState);        }    }}
 |