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

推荐订阅源

G
Google Developers Blog
博客园 - 三生石上(FineUI控件)
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
Y
Y Combinator Blog
博客园 - 聂微东
Google DeepMind News
Google DeepMind News
D
Docker
罗磊的独立博客
Microsoft Security Blog
Microsoft Security Blog
D
DataBreaches.Net
B
Blog
Vercel News
Vercel News
Recent Announcements
Recent Announcements
GbyAI
GbyAI
阮一峰的网络日志
阮一峰的网络日志
T
The Blog of Author Tim Ferriss
H
Hackread – Cybersecurity News, Data Breaches, AI and More
P
Proofpoint News Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Azure Blog
Microsoft Azure Blog
宝玉的分享
宝玉的分享

博客园 - 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));
            }
        }
    }