c# 服务程序重启自身

由于工作有这样的需求,于是各种寻找,但是都不满意,偶然间想起一个方法

1、修改服务的Program.cs文件如下

 static void Main(string[] args)
        {

            //LoadFile();
            if (args == null || args.Length == 0)
            {
                ServiceBase[] servicesToRun;
                servicesToRun = new ServiceBase[]
                {
                    new ServiceClient()
                };
                ServiceBase.Run(servicesToRun);
            }
            else if (args.Length == 1 && System.Text.RegularExpressions.Regex.IsMatch(args[0], @"^[1-5]$"))
            {
                try
                {
                    Process p = null;
                    ServiceController service = null;
                    switch (int.Parse(args[0]))
                    {
                        case 1:
                            //取当前可执行文件路径
                            var path = Process.GetCurrentProcess().MainModule.FileName + "";
                            p = Process.Start("sc", "create AutoRunClient binpath= \"" + path + "\" displayName= AutoRunClient start= auto");
                            p.WaitForExit();
                            break;
                        case 2:
                            p = Process.Start("sc", "delete AutoRunClient");
                            p.WaitForExit();
                            break;
                        case 3:
                            service = new ServiceController("AutoRunClient");
                            service.Start();
                            service.WaitForStatus(ServiceControllerStatus.Running);
                            break;
                        case 4:
                            service = new ServiceController("AutoRunClient");
                            service.Stop();
                            service.WaitForStatus(ServiceControllerStatus.Stopped);
                            break;
                        case 5:
                            service = new ServiceController("AutoRunClient");
                            service.Stop();
                            service.WaitForStatus(ServiceControllerStatus.Stopped);
                            service.Start();
                            service.WaitForStatus(ServiceControllerStatus.Running);
                            break;

                    }
                }
                catch
                { }
            }
}

这样,这个服务就做成了一个可当服务可当运行程序的一个功能

那么接下来,当我们需要重启自身的时候 可以这么干

Process.Start("ClientServer.exe","5");

这样就调用自身的有参的实例,然后就重启了

时间: 2024-08-30 08:25:56

c# 服务程序重启自身的相关文章

转 HTTP.SYS 详解

http.sys 是一个位于Win2003和WinXP SP2中的操作系统核心组件, 能够让任何应用程序通过它提供的接口,以http协议进行信息通讯. 温馨提示:如果用户不慎删除了该驱动文件,不用担心,该驱动会在下次系统启动时重建.是一个删不掉的系统核心组件!实用程序结束该驱动,该驱动也会马上重新创建(只有粉碎文件才不能马上重建,但粉碎后,下次启动会重建). 微软在Windows 2003 Server里引进了新的HTTP API和kernel mode driver Http.sys,目的是使

iis6.0与asp.net的运行原理

这几天上网翻阅了不少前辈们的关于iis和asp.net运行原理的博客,学的有点零零散散,花了好长时间做了一个小结(虽然文字不多,但也花了不少时间呢),鄙人不才,难免有理解不道的地方,还望前辈们不吝赐教. 这篇博客主要是描述asp.net程序在iis6.0上的一个执行过程. 执行过程图: 组件描述 HTTP.SYS: Win2003和winXP SP2的核心操作系统组件,,能够让任何应用程序通过它提供的接口,以http协议进行信息通讯. 优点: 缓存-静态的内容被缓存于内核模式下,这使服务响应速度

ASP.NET原理分析

ASP.NET请求与处理全过程分析 1.用户向服务器的某IP端口发送请求,此端口通过Http.sys来管理,请求报文被Http.sys接收,Http.sys在注册表中找能处理这个请求类型的应用程序,最终找到IIS,请求被提交到IIS服务器处理,IIS判断请求的类型. 如果请求的是静态文件,那么IIS会直接处理,在本地找到请求的静态文件,然后发送给浏览器. 如果是动态文件,如aspx或者ashx等动态文件,IIS就会去它的映射表里面去找,实现它接口的那个扩展程序可以处理这样的动态文件,然后IIS发

Http请求处理整个过程

一,服务器接受http请求的实际处理过程 二,当客户端将请求通过网络传送到服务器时,HTTP.SYS会在内核模式下实时监听当前的http请求.Http.sys功能如下描述: http.sys 是一个位于Win2003和WinXP SP2中的操作系统核心组件, 能够让任何应用程序通过它提供的接口,以http协议进行信息通讯. 温馨提示:如果用户不慎删除了该驱动文件,不用担心,该驱动会在下次系统启动时重建.是一个删不掉的系统核心组件!实用程序结束该驱动,该驱动也会马上重新创建(只有粉碎文件才不能马上

rsync 服务及部署

1 rsync简介 1.1 什么是rsync rsync: - a fast, versatile, remote (and local) file-copying toolrsync:是一种快速,多功能,远程和本地文件拷贝的工具rsync --version:查看rsync软件版本备份服务重要性: ?企业中所有要进行操作的数据文件,一定操作前备份.?? 企业备份数据方法:重要数据需要保存在专门备份服务器上 ?第三方网盘存储. 1.2 rsync特点 可以实现全量和增量备份 1.2.1 全量和增

rsync服务下载安装配置

下载安装配置远程传输服务: 服务端: 一. yum install  rsync -y 二.  编写配置文件: vim /etc/rsyncd.conf uid = rsync --- 虚拟用户rsync,管理备份目录 原理??? gid = rsync --- 虚拟用户组rsync,管理备份目录 port = 873 --- 服务默认端口号873 fake super = yes --- 伪装管理员功能开启 便于可以执行chgrp命令 use chroot = no --- 安全配置 !!!

用C语言编写Windows服务程序的五个步骤

Windows 服务被设计用于需要在后台运行的应用程序以及实现没有用户交互的任务.为了学习这种控制台应用程序的基础知识,C(不是C++)是最佳选择.本文将建立并实现一个简单的服务程序,其功能是查询系统中可用物理内存数量,然后将结果写入一个文本文件.最后,你可以用所学知识编写自己的Windows 服务. 当初他写第一个NT 服务时,他到 MSDN 上找例子.在那里他找到了一篇 Nigel Thompson 写的文章:“Creating a Simple Win32 Service in C++”,

linux下监视进程 崩溃挂掉后自动重启的shell脚本

如何保证服务一直运行?如何保证即使服务挂掉了也能自动重启?在写服务程序时经常会碰到这样的问题.在Linux系统中,强大的shell就可以很灵活的处理这样的事务. 下面的shell通过一个while-do循环,用ps -ef|grep 检查loader进程是否正在运行,如果没有运行,则启动,这样就保证了崩溃挂掉的进程重新被及时启动. 必须注意两点: 1.ps |grep 一个进程时必须加上其路劲,否则容易grep到错误的结果: 2.必须用 -v 从结果中去除grep命令自身,否则结果非空. 复制代

DELPHI编写服务程序总结

一.服务程序和桌面程序的区别 Windows 2000/XP/2003等支持一种叫做“系统服务程序”的进程,系统服务和桌面程序的区别是:系统服务不用登陆系统即可运行:系统服务是运行在System Idle Process/System/smss/winlogon/services下的,而桌面程序是运行在Explorer下的:系统服务拥有更高的权限,系统服务拥有Sytem的权限,而桌面程序只有Administrator权限:在Delphi中系统服务是对桌面程序进行了再一次的封装,既系统服务继承于桌