C#使用windows服務實現開機啟動配置 ——在沒有wifi連線的環境下開機啟動銳捷客戶端
因為在學校電腦上網需要連線銳捷客戶端,每次開機都得手動點開銳捷客戶端,十分麻煩,於是便想寫個服務,開機後判斷當前網線是否插上,若插上則開機後啟動銳捷客戶端,否則不作行動。流程如下:
首先是解決判斷當前環境下是否有wifi可供連線的實現:使用api:NetworkInterface,其提供了網路介面的配置資訊和統計資訊,可獲得計算機中所有網路的MAC地址、名字、是否可用等一系列資訊,讀者可自行測試:
NetworkInterface[]fNetworkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface adapter
{
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“,選擇屬性,設定屬性
a)Description 服務描述,直接顯示到Windows服務列表中的描述;
b)DisplayName 服務顯示名稱,直接顯示到Windows服務列表中的名稱;
c)ServiceName 服務程序名稱,安裝與解除安裝服務時的唯一標識.
這裡我Desctiption與ServiceName為了顯眼,調皮一點也可以的吧?
完成後點選“生成解決方案”,然後進入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這個路徑必須存在,否則會刪除不成功。
至此程式功能已實現完畢。