有的时候我们需要自己写服务,而且需要给绑定一个 托盘!用来更加方便的 控制我们的程序!例如 QQ 那种!
下面我来讲一下他们之间是怎么关联的!
有怎么几步!
1,自己写一个服务,(上一篇博客中有详细的介绍,可以去参考!)
2,桌面交互的配置
在serviceInstaller1_Committed事件中添加如下代码:
ConnectionOptions coOptions = new ConnectionOptions();
coOptions.Impersonation = ImpersonationLevel.Impersonate;
ManagementScope mgmtScope = new System.Management.ManagementScope(@"root\CIMV2", coOptions);
mgmtScope.Connect();
ManagementObject wmiService;
wmiService = new ManagementObject("Win32_Service.Name='" + serviceInstaller1.ServiceName + "'");
ManagementBaseObject InParam = wmiService.GetMethodParameters("Change");
InParam["DesktopInteract"] = true;
ManagementBaseObject OutParam = wmiService.InvokeMethod("Change", InParam, null);
此段代码即是将此Service设置为“允许与桌面交互”,有了此选项之后,服务启动时GUI程序的界面将会出现。
3,与托盘程序的关联,这是一个单独的方法!因为托盘程序 一般都是一个单独的程序!所以哦我们在服务只能去调用托盘程序!在服务启动的时候启动托盘程序!
protected void Formstart()
{
string serviceControl = @"E:\学习项目\windows服务控制\WinServicesControl\WinServicesControl\bin\Debug\WinServicesControl.exe";// 托盘程序.exe的路径
bool ico = false;
Process[] processOnComputer=Process.GetProcesses(); // 调出所有的进程,查找是否有我们需要的 托盘程序的进程!
foreach(Process p in processOnComputer)
{
if (p.ProcessName == "WinServicesControl") // 遍历所有的进程
{
ico = true; // 如果有,就可以直接执行 托盘程序里的方法了!
}
}
if (!ico) //如果没有托盘程序的进程!我们就需要新建一个进程,去启动托盘程序!
{
string control = serviceControl;
Process p = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo(control);
p.StartInfo = startInfo;
p.Start();
}
}
4,安装自己的写好的服务!(上一篇博客中有详细的介绍,可以去参考)
5,找到自己写的服务,属性,设置!如下图!
这样在启动我们的服务的时候,我们写好的托盘程序就会执行了!也就是说能够看到我们的 托盘图标了!
在下一篇文章中,我会介绍一个 那个单独的托盘程序!