(转)C#创建windows服务
2020-12-13 01:59
标签:des winform style class blog c 原文地址:http://blog.itpub.net/23109131/viewspace-688117/ 创建一个新的 Windows 服务项目,可以从Visual C# 工程中选取 Windows 服务(Windows
Service)选项,给工程一个新文件名,然后点击确定。现在项目中有个Service1.cs类: 查看其各属性的含意是:
Autolog
是否自动写入系统的日志文件 第二步:向服务中增加功能 OnStart函数在启动服务时执行,OnStop函数在停止服务时执行。这个例子是:当启动和停止服务时,定时显示“hello,你好”; 首先在Service1.cs设计中拖个timer控件,设置好它的Interval=60000,与要做的功能 代码如下: 第三步: 将安装程序添加到服务应用程序 1:在解决方案中,右击服务Service1.cs设计视图。 2:在属性窗口中,单击-添加安装程序 这时项目中就添加了一个新类 ProjectInstaller 和两个安装组件
ServiceProcessInstaller 和 ServiceInstaller,并且服务的属性值被复制到组件。 3:若要确定如何启动服务,请单击 ServiceInstaller 组件并将 StartType 属性设置为适当的值。
Manual 服务安装后,必须手动启动。 Automatic
每次计算机重新启动时,服务都会自动启动。
Disabled 服务无法启动。 4:将serviceProcessInstaller类的Account属性改为 LocalSystem 这样,不论是以哪个用户登录的系统,服务总会启动。 第四步:生成服务程序 通过从生成菜单中选择生成来生成项目shift+F6。或重新生成项目注意 不要通过按 F5
键来运行项目——不能以这种方式运行服务项目。 第五步:服务的安装与卸载 访问项目中的已编译可执行文件所在的目录。 卸载服务 installutil /u WindowsService1.exe 附:installutil.exe
在安装VS电脑的C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe 推荐的另一中安装服务的方法 代码如下: 参数。一般就是一个exe的文件名 通过System.Configuration.Install.ManagedInstallerClass 类中的静态方法
InstallHelper就可以实现手工安装。 该方法的 签名如下: 安装后,服务不会自动启动,服务不可以与桌面交互 1.设置服务安装后自动启动 2.设置允许服务与桌面交互方法 让服务启动某个应用程序,就要修改服务的属性,勾选允许服务与桌面交互,#region 设置服务与桌面交互 3.windows服务是不执行Timer控件的,解决办法
System.Timers.Timer t = new
System.Timers.Timer(); } 总结:windows服务编程 (转)C#创建windows服务,搜素材,soscw.com (转)C#创建windows服务 标签:des winform style class blog c 原文地址:http://www.cnblogs.com/the-three/p/3751055.html第一步:创建服务框架
CanHandlePowerEvent
服务时候接受电源事件
CanPauseAndContinue
服务是否接受暂停或继续运行的请求
CanShutdown
服务是否在运行它的计算机关闭时收到通知,以便能够调用 OnShutDown
过程
CanStop
服务是否接受停止运行的请求
ServiceName
服务名
在 .cs代码文件中我们可以看到,有两个被忽略的函数
OnStart和OnStop。
//OnStart函数在启动服务时执行
protected
override
void
OnStart(
string
[] args)
{
this
.timer1.Start();
}
// OnStop函数在停止服务时执行
protected
override
void
OnStop()
{
this
.timer1.Stop();
}
private
void
timer1_Tick(
object
sender, EventArgs e)
{
System.Diagnostics.Process.Start(
"http://www.baidu.com"
);
}
用项目的输出作为参数,从命令行运行
InstallUtil.exe。在命令行中输入下列代码:
installutil WindowsService1.exe
用项目的输出作为参数,从命令行运行 InstallUtil.exe。
到vs2008命令提示符下installutil.exe
/?可以查看其帮助说明
用winform来调用安装,当点击按钮时,安装服务.
1.项目需要添加引用System.Configuration.Install和System.ServiceProcess
using System.Configuration.Install;
using
System.ServiceProcess;
///
/// 安装服务
///
private void
btnInstall_Click(object sender, EventArgs e)
{
string[]
args = { "WindowsService1.exe"
};
//卸载服务
string[] args = {"/u",
"WindowsService1.exe"};
if
(!ServiceIsExisted("Service1"))//这里的Service1是对应真实项目中的服务名称
{
try
{
ManagedInstallerClass.InstallHelper(args); //参数 args 就是你用 InstallUtil.exe
工具安装时的
}
catch (Exception
ex)
{
MessageBox.Show(ex.Message);
return;
}
}
else
{
MessageBox.Show("该服务已经存在,不用重复安装。");
}
}
///
///
检查指定的服务是否存在。
///
///
要查找的服务名字
///
private bool
ServiceIsExisted(string
svcName)
{
ServiceController[] services =
ServiceController.GetServices();
foreach
(ServiceController s in services)
{
if
(s.ServiceName ==
svcName)
{
return true;
}
}
return
false;
}
public static void InstallHelper(string[] args)
其中参数
args 就是你用 InstallUtil.exe 工具安装时的参数。一般就是一个exe的文件名
第六步:调试服务
添加serviceInstaller1的AfterInstall事件
using
System.Diagnostics;
private
void
serviceInstaller1_AfterInstall(
object
sender, InstallEventArgs e)
{
System.ServiceProcess.ServiceController s =
new
System.ServiceProcess.ServiceController(
"Service1"
);
s.Start();
//设置服务安装后立即启动
}
///
/// 设置服务与桌面交互,在serviceInstaller1的AfterInstall事件中使用
///
/// 服务名称
private
void
SetServiceDesktopInsteract(
string
serviceName)
{
System.Management.ManagementObject wmiService =
new
System.Management.ManagementObject(
string
.Format
(
"Win32_Service.Name=‘{0}‘"
, serviceName));
System.Management.ManagementBaseObject changeMethod = wmiService.GetMethodParameters(
"Change"
);
changeMethod[
"DesktopInteract"
] =
true
;
System.Management.ManagementBaseObject utParam = wmiService.InvokeMethod(
"Change"
, changeMethod,
null
);
}
#endregion
把上面用到的Timer控件清除
public
Service1()
{
InitializeComponent();
t.Interval
=1000*15;
t.Elapsed += new
System.Timers.ElapsedEventHandler(RunWork);
t.AutoReset =
true;//设置是执行一次(false),还是一直执行(true);
t.Enabled = true;//是否执行
public void RunWork(object source, System.Timers.ElapsedEventArgs
e)
{
//要定时处理的事情
//这样服务就可以定时执行任务了
}
1.服务不会执行Timer控件
2.默认服务安装完成后,是不会自动启动,不能与桌面交互
3.安装服务时,推荐新建个winform项目,用winform项目来执行服务的安装与卸载
4.OnStart函数在启动服务时执行,OnStop函数在停止服务时执行。
5.右击-将服务添加到应用程序