惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
有赞技术团队
有赞技术团队
博客园 - 【当耐特】
云风的 BLOG
云风的 BLOG
Martin Fowler
Martin Fowler
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
量子位
Engineering at Meta
Engineering at Meta
博客园 - 叶小钗
T
The Blog of Author Tim Ferriss
Recent Announcements
Recent Announcements
罗磊的独立博客
B
Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
U
Unit 42
Microsoft Azure Blog
Microsoft Azure Blog
D
Docker
N
Netflix TechBlog - Medium
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog RSS Feed
I
InfoQ
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
V2EX

博客园 - 3stones

.NET平台下WEB应用程序部署(安装数据库和自动配置)转 调试自定义操作/安装程序类的方法<转> - 3stones - 博客园 Sql Server中的集合操作Union Intersect Except 如何创建/安装/调试Windows服务&lt;转&gt; 利用Mircosoft URLRewriter.dll实现页面伪静态 [C#]将数字前面补0,补足设定的长度 用IFormatter实现&gt;存储容器(功能:实现游戏保存和读取) 加壳工具简介(图) 查壳脱壳工具介绍(图) .net制作的wap网站在手机中的测试 - 3stones - 博客园 vs2008开发wap网站(一) 英文面试自我介绍(一) 丁香园-英语面试精选 英语面试自我介绍范文(二) Remoting的注册与注销 - 3stones - 博客园 创建一个从数据库读入内容的远程对象 c#中的remoting和webservice有什么区别 经典推荐--.Net面试法宝(面试题收集) Response.Redirect(),Server.Transfer(),Server.Execute()的区别
安装 启动 停止 卸载 Windows服务 c#
3stones · 2010-01-29 · via 博客园 - 3stones

问题:windows服务安装时,出错:System.ComponentModel.Win32Exception: 帐户名无效或不存在,

解决:将serviceProcessInstaller1->Accout属性,设为:LocalSystem(默认是User)。

    运行: Installuitl 程序名.exe ,安装成功。

    卸载是  Installuitl /u 程序名.exe

问题:如何不使用InstallUtil 安装 启动 停止 卸载 Windows服务?

解决:用System.Configuration.Install.AssemblyInstaller类加载一个程序集,并运行其中的安装程序。   
    [C#]   
    //安装服务
    public static void InstallService(string filepath, string serviceName, string[] options)
    {
        try
        {
            if (!IsServiceExisted(serviceName))
            {
                IDictionary mySavedState = new Hashtable();
                AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
                myAssemblyInstaller.UseNewContext = true;
                myAssemblyInstaller.Path = filepath;
                myAssemblyInstaller.CommandLine = options;
                myAssemblyInstaller.Install(mySavedState);
                myAssemblyInstaller.Commit(mySavedState);
                myAssemblyInstaller.Dispose();
            }
        }
        catch (Exception ex)
        {
            throw new Exception("Install Service Error\n" + ex.Message);
        }
    }
    //卸载服务
    public static void UnInstallService(string filepath, string serviceName, string[] options)
    {
        try
        {
            if (IsServiceExisted(serviceName))
            {
                AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
                myAssemblyInstaller.UseNewContext = true;
                myAssemblyInstaller.Path = filepath;
                myAssemblyInstaller.CommandLine = options;
                myAssemblyInstaller.Uninstall(null);
                myAssemblyInstaller.Dispose();
            }
        }
        catch (Exception ex)
        {
            throw new Exception("UnInstall Service Error\n" + ex.Message);
        }
    }
    //判断服务是否存在
    public static bool IsServiceExisted(string serviceName)
    {
        ServiceController[] services = ServiceController.GetServices();
        foreach (ServiceController s in services)
        {
            if (s.ServiceName == serviceName)
            {
                return true;
            }
        }
        return false;
    }
    //启动服务
    public static void StartService(string serviceName)
    {
        if (IsServiceExisted(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();
                service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(60));
            }
        }
    }
    //停止服务
    public static void StopService(string serviceName)
    {
        if (IsServiceExisted(serviceName))
        {
            System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName);
            if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)
            {
                service.Stop();
                service.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(60));
            }
        }
    }