当前位置: 首页 > 技术研究 > C# > C#加载一个程序集,并运行其中的所有安装程序

C#加载一个程序集,并运行其中的所有安装程序

发布于:2015-4-15 C# 0条评论 2,748 views
欢迎光临小站,愿能为您提供帮助与启发,热爱分享、享受分享、乐于分享,让我们携手共同进步。
.////////@@@是服务的名字
.    /// <summary>
.    /// 用ServiceController启用服务
.    /// </summary>
.    /// <param name="sender"></param>
.    /// <param name="e"></param>
.    protected void Button5_Click(object sender, EventArgs e)
.    {
.        System.ServiceProcess.ServiceController   myController   =
.              new System.ServiceProcess.ServiceController("@@@");
.
. ///ContinuePending 服务即将继续。这对应于 Win32 SERVICE_CONTINUE_PENDING 常数,该常数定义为 0x00000005。
. //Paused 服务已暂停。这对应于 Win32 SERVICE_PAUSED 常数,该常数定义为 0x00000007。
. //PausePending 服务即将暂停。这对应于 Win32 SERVICE_PAUSE_PENDING 常数,该常数定义为 0x00000006。
. //Running 服务正在运行。这对应于 Win32 SERVICE_RUNNING 常数,该常数定义为 0x00000004。
. //StartPending 服务正在启动。这对应于 Win32 SERVICE_START_PENDING 常数,该常数定义为 0x00000002。
. //Stopped 服务未运行。这对应于 Win32 SERVICE_STOPPED 常数,该常数定义为 0x00000001。
. //StopPending 服务正在停止。这对应于 Win32 SERVICE_STOP_PENDING 常数,该常数定义为 0x00000003。
.
.        if (myController.Status.Equals(ServiceControllerStatus.Stopped)||myController.Status.Equals(ServiceControllerStatus.StopPending))
.        {
.              myController.Start();
.            this.Button5.Text="关闭服务";
.              Response.Write("<mce:script language=javascript><!--
.alert('开启');
.// --></mce:script>");
.        }
.        else
.        {
.              myController.Stop();
.            this.Button5.Text="开启服务";
.            Response.Write("<mce:script language=javascript><!--
.alert('关闭服务');
.// --></mce:script>");
.        }
.
.    }
.
.
.一、安装服务:
.
.private void InstallService(IDictionary stateSaver, string filepath)
.
.        {
.
.            try
.
.            {
.
.                System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController("ServiceName");
.
.                if(!ServiceIsExisted("ServiceName"))
.
.                {
.
.                    //Install Service
.
.                    AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
.
.                    myAssemblyInstaller.UseNewContext = true;
.
.                    myAssemblyInstaller.Path =filepath;
.
.                    myAssemblyInstaller.Install(stateSaver);
.
.                    myAssemblyInstaller.Commit(stateSaver);
.
.                    myAssemblyInstaller.Dispose();
.
.                    //--Start Service
.
.                    service.Start();
.
.                }
.
.                else
.
.                {
.
.                    if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending)
.
.                    {
.
.                        service.Start();
.
.                    }
.
.                }
.
.            }
.
.            catch (Exception ex)
.
.            {
.
.                throw new Exception("installServiceError/n" + ex.Message);
.
.            }
.
.        }
.
.二、卸载windows服务:
.
.        private void UnInstallService(string filepath)
.
.        {
.
.            try
.
.            {
.
.                if (ServiceIsExisted("ServiceName"))
.
.                {
.
.                    //UnInstall Service
.
.                    AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
.
.                    myAssemblyInstaller.UseNewContext = true;
.
.                    myAssemblyInstaller.Path = filepath;
.
.                    myAssemblyInstaller.Uninstall(null);
.
.                    myAssemblyInstaller.Dispose();
.
.                }
.
.            }
.
.            catch (Exception ex)
.
.            {
.
.                throw new Exception("unInstallServiceError/n" + ex.Message);
.
.            }
.
.        }
.
.三、判断window服务是否存在:
.
.        private bool ServiceIsExisted(string serviceName)
.
.        {
.
.            ServiceController[] services = ServiceController.GetServices();
.
.            foreach (ServiceController s in services)
.
.            {
.
.                if (s.ServiceName == serviceName)
.
.                {
.
.                    return true;
.
.                }
.
.            }
.
.            return false;
.
.        }
.
.四、启动服务:
.
.private void StartService(string serviceName)
.
.        {
.
.            if (ServiceIsExisted(serviceName))
.
.            {
.
.                System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName);
.
.                if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending)
.
.                {
.
.                    service.Start();
.
.                    for (int i = 0; i < 60; i++)
.
.                    {
.
.                        service.Refresh();
.
.                        System.Threading.Thread.Sleep(1000);
.
.                        if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)
.
.                        {
.
.                            break;
.
.                        }
.
.                        if (i == 59)
.
.                        {
.
.                            throw new Exception(startServiceError.Replace("$s$", serviceName));
.
.                        }
.
.                    }
.
.                }
.
.            }
.
.        }
.
.五、停止服务:
.
.        private void StopService(string serviceName)
.
.        {
.
.            if (ServiceIsExisted(serviceName))
.
.            {
.
.                System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName);
.
.                if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)
.
.                {
.
.                    service.Stop();
.
.                    for (int i = 0; i < 60; i++)
.
.                    {
.
.                        service.Refresh();
.
.                        System.Threading.Thread.Sleep(1000);
.
.                        if (service.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)
.
.                        {
.
.                            break;
.
.                        }
.
.                        if (i == 59)
.
.                        {
.
.                            throw new Exception(stopServiceError.Replace("$s$", serviceName));
.
.                        }
.
.                    }
.
.                }
.
.            }
.
.        }
.
.
.注:手动安装window服务的方法:
.
.在“Visual Studio 2005 命令提示”窗口中,运行:
.
.安装服务:installutil servicepath
.
.卸除服务:installutil /u servicepath

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据