1. 程式人生 > >C#使用windows服務實現開機啟動配置 ——在沒有wifi連線的環境下開機啟動銳捷客戶端

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這個路徑必須存在,否則會刪除不成功。

至此程式功能已實現完畢。