C#使用windows服务实现开机启动配置 ——在没有wifi连接的环境下开机启动锐捷客户端

因为在学校电脑上网需要连接锐捷客户端,每次开机都得手动点开锐捷客户端,十分麻烦,于是便想写个服务,开机后判断当前网线是否插上,若插上则开机后启动锐捷客户端,否则不作行动。流程如下:

首先是解决判断当前环境下是否有wifi可供连接的实现:使用api:NetworkInterface,其提供了网络接口的配置信息和统计信息,可获得计算机中所有网络的MAC地址、名字、是否可用等一系列信息,读者可自行测试:

            NetworkInterface[]fNetworkInterfaces = NetworkInterface.GetAllNetworkInterfaces();

            foreach (NetworkInterface adapter in fNetworkInterfaces)

            {

                Console.WriteLine(adapter.Name+ "," +adapter.OperationalStatus.ToString());

            }

这里我是使用NetworkInterface获得了所有的网络接口,并打印其名字与可用状态。若可用,adapter.OperationalStatus.ToString()会打印为“Up”,否则为“Down”。当然你也可以通过adapter获取其他属性来实现功能。

在我的电脑中,网络适配器名字如下:

 

我的wifi适配器名字就叫做“WLAN”,于是我的c#windows服务项目核心语句如下:

 

NetworkInterface[] fNetworkInterfaces =NetworkInterface.GetAllNetworkInterfaces();

            foreach (NetworkInterface adapter in fNetworkInterfaces)

            {

                if (adapter.Name == "WLAN" && adapter.OperationalStatus.ToString() != "Up")

                {

                    //没有wifi连接环境,开启锐捷客户端

                    try

                    {

                        Process proc = new Process();

                        proc.StartInfo.FileName= @"D:\Program Files (x86)\iNode\iNode Client\iNodeClient.exe";

                        proc.Start();

                    }catch { }

                }

            }

其中@"D:\Program Files(x86)\iNode\iNode Client\iNode Client.exe";是我的锐捷客户端位置。

回到主题,下面开始完整的创建一遍c#windows服务项目:

自动生成的service1.cs文件里的OnStart()函数中添加如下代码:

NetworkInterface[]fNetworkInterfaces = NetworkInterface.GetAllNetworkInterfaces();

            foreach (NetworkInterface adapter in fNetworkInterfaces)

            {

                if (adapter.Name == "WLAN" && adapter.OperationalStatus.ToString() != "Up")

                {

                    //没有wifi连接环境,开启锐捷客户端

                    try

                    {

                        Process proc = new Process();

                        proc.StartInfo.FileName= @"D:\Program Files (x86)\iNode\iNode Client\iNodeClient.exe";

                        proc.Start();

                    }catch { }

                }

            }

这是我要运行的控制台程序的路径,你用的时候换成你的就可以了,然后双击MyService.cs服务文件,在左侧设计模式中,右键,点击添加安装程序,自动会生成Projectinstaller.cs文件以及两个安装组件

右键”ServiceProcessInstaller1“,选择属性,设置Account 帐号方式,建议为LocalService

右键”ServiceInstaller1“,选择属性,设置属性

aDescription 服务描述,直接显示到Windows服务列表中的描述;

bDisplayName 服务显示名称,直接显示到Windows服务列表中的名称;

cServiceName 服务进程名称,安装与卸载服务时的唯一标识.

这里我DesctiptionServiceName为了显眼,调皮一点也可以的吧?

完成后点击“生成解决方案”,然后进入Debug目录,复制该exe文件的路径,准备安装服务:

下面可以开始安装该服务文件了。

安装服务:

(1)通过手动进入FrameWork目录下安装

管理员权限打开cmd程序,进入相应的Framework版本文件夹下面。由于demo的框架使用的是4.5的,所以我是 cd C:\Windows\Microsoft.NET\Framework\v4.0.30319回车 
切换当前目录,然后输入

InstallUtil.exeF:\WorkSpace\VS\User_myServices\User_myServices\bin\Debug\User_myServices.exe

回车 
说明:F:\WorkSpace\VS\User_myServices\User_myServices\bin\Debug\User_myServices.exe表示我的项目生成的exe文件位置。

回车后:

说明已经安装完成,接下来win+R输入services.msc调出服务界面,可以看到服务已经安装成功了:

 

(2)通过写批处理文件进行安装

创建安装服务批处理文件Install.bat,可以创建记事本,然后修改后缀为bat,记事本内容如下:

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exeWindowsServiceDemo.exe

Net Start MyService

sc config MyService start= auto

pause

记事本另存为时设置编码为ANSI,如下图:

将该文件保存到Debug文件夹下,运行该文件即可安装服务。

同理创建创建卸载服务批处理文件Uninstall.bat,内容如下:

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u WindowsServiceDemo.exe
pause


卸载服务:

卸载很简单,打开cmd, 直接输入 sc delete TestServer便可.删除服务的时候,E:…\TestServert.exe这个路径必须存在,否则会删除不成功。

 

至此程序功能已实现完毕。


猜你喜欢

转载自blog.csdn.net/qq_36927190/article/details/79755416
今日推荐