系統服務學習

2021-04-27 08:51:13 字數 3463 閱讀 2011

virtual

virtual 關鍵字用於修飾方法、屬性、索引器或事件宣告,並使它們可以在派生類中被重寫。

呼叫虛方法時,將為重寫成員檢查該物件的執行時型別。將呼叫大部分派生類中的該重寫成員,如果沒有派生類重寫該成員,則它可能是原始

成員。預設情況下,方法是非虛擬的。不能重寫非虛方法。

virtual 修飾符不能與 static、abstract、private 或 override 修飾符一起使用。

例子using system;

class testclass

public dimensions(double x, double y)

public virtual double area()

}public class circle : dimensions

public override double area()

}在windows服務中 system.serviceprocess.servicebase類中為將作為服務應用程式的一部分而存在的服務提供基類。在建立新的服務類時,必須從 servicebase 派生。

它虛擬的方法有

1 protected virtual void oncontinue();

// 相當於在計算機管理中的服務中執行 恢復操作

2 protected virtual void oncustomcommand(int command);

//自定義命令

//  command:這個引數只能是128-256

//  傳送給服務的命令訊息。

oncustomcommand 使您可以指定除啟動、停止、暫停和繼續服務以外的其他功能。scm 不檢查自定義命令來驗證服務是否支援傳入的 command 引數。它將自定義命令直接傳遞到服務。如果服務不能識別 command 引數,則不執行任何操作。自定義命令由 servicecontroller 元件中的 executecommand 語句引發。使用開關語句或 if..then 條件來處理在服務上定義的自定義命令。可以在應用程式中定義或在 oncustomcommand 中使用的自定義命令的值只有 128 和 256 之間的值。128 以下的整數對應於系統保留的值。如果 autolog 屬性為 true,自定義命令就會像其他所有命令一樣將項寫入事件日誌以報告方法執行是否成功。

例子// handle a custom command.

protected override void oncustomcommand(int command)

}3   protected virtual void onpause();

指定要在服務暫停時採取的操作。

4   protected virtual bool onpowerevent(powerbroadcaststatus powerstatus);   

//當在派生類中實現時,該方法於計算機電源狀態更改時執行。這適用於膝上型計算機進入掛起模式時的情況,該模式不同於系統關閉。

// 引數 powerstatus:

//  system.serviceprocess.powerbroadcaststatus,指示來自系統的有關電源狀態的通知。

// 返回結果:

// 當在派生類中實現時,應用程式的需要將確定要返回的值。例如,如果傳遞了 querysuspend 廣播狀態,則可以通過返回 false 來使應用程式拒絕查詢。使用 onpowerevent 指定當 powerbroadcaststatus 列舉中指示的系統事件發生(例如計算機被置於掛起模式或指示電池電量不足)時進行的處理。當 canhandlepowerevent 屬性為 true 時,應重寫 onpowerevent。

補充:   

powerbroadcaststatus 列舉

指示系統的電源狀態。

5    protected virtual void onsessionchange(sessionchangedescription changedescription);

//     從終端伺服器會話接收到更改事件時執行。

//// 引數:

//   changedescription:

//     標識更改型別的 system.serviceprocess.sessionchangedescription 結構。

protected virtual void onshutdown();

// 在派生類中實現時,該方法於系統即將關閉時執行。該方法指定應在系統即將關閉前執行的處理。在計算機即將關閉的時候執行的。

6 protected virtual void onstart(string args);

//在 vs2008建立windows服務的時候已經存在了

//就是和這裡的啟動引數相對應。

// 當在派生類中實現時,在下列情況下執行:在「服務控制管理器」(scm) 向服務傳送「開始」命令時,或者在作業系統啟動時(對於自動啟動的服務)。指定服務啟動時採取的操作。

//// 引數:args:

// 啟動命令傳遞的資料。

7   protected virtual void onstop();

//在派生類中實現時,該方法於「服務控制管理器」(scm) 將「停止」命令傳送到服務時執行。指定服務停止執行時採取的操作。

servicecontroller 類

表示 windows 服務並允許連線到正在執行或者已停止的服務、對其進行操作或獲取有關它的資訊。

可以使用 servicecontroller 類連線到現有服務並控制其行為。當建立 servicecontroller 類的例項時,設定其屬性,以便它與特定的 windows 服務互動作用。然後可以使用此類來啟動、停止和以其他方式操作該服務。

在管理容量中最有可能使用 servicecontroller 元件。例如,可以建立通過 servicecontroller 例項向服務傳送自定義命令的 windows 或 web 應用程式。這很有用,因為服務控制管理器 (scm) microsoft 管理控制台單元不支援自定義命令。

//也就是說我們也可以不需要自己寫protected virtual void oncustomcommand(int command)這個方法了

建立 servicecontroller 的例項後,必須為其設定兩個屬性來標識與其互動的服務:計算機名稱和要控制的服務的名稱。

注意:預設情況下,machinename 設定為本地計算機,因此不需要更改它,除非想將該例項設定為指向另一台計算機。

服務作者通常編寫**來自定義與特定命令關聯的操作。例如,服務可以包含響應 servicebase.onpause 命令的**。這種情況下,pause 任務的自定義處理在系統暫停服務前執行。我們可以任意定義操作。

服務可以處理的命令集取決於該服務的屬性;例如,可以將服務的 canstop 屬性設定為 false。該設定使 stop 命令在那個特定的服務上不可用;它禁用了必要的按鈕,使您無法從 scm 中停止服務。如果試圖通過**停止服務,系統將引發錯誤,並顯示錯誤訊息「未能停止 servicename」。

官方例子

下面是servicebase例子

系統學習 DHCP服務原理

dhcp客戶端 獲取網路配置資訊 dhcp中繼 服務端和客戶端之間 dhcp的裝置 租約 獲得的ip位址使用時間 獲得ip位址時租約會被啟用並更新其位址租約,當租約到期或者被刪除時租約會停止c client s server c端向區域網中傳送乙個dhcp discover包,主要用於發現s端 s端...

Linux中的系統服務系統服務

系統服務的控制 1.systemd 系統初始化程式,系統開始的第乙個程序,pid為1 2.systemctl 命令 systemctl list units 列出當前系統服務的狀態 systemctl list unit files 列出服務的開機狀態 systemctl status sshd 檢...

深度學習推薦系統 筆記06 推薦系統線上服務相關

需要跟資料庫打交道,把候選物品和離線處理好的特徵載入到伺服器 召回層 排序層 業務邏輯 結果多樣性 流行度 ab 測試 負載均衡 nginx或專門的硬體級負載均衡裝置 快取 1 預先快取好幾類新使用者的推薦列表 2 利用新使用者有限的資訊,比如ip,註冊資訊等做乙個簡單的聚類,為每個人群聚類產生合適...