前言: 話說前陣子爸爸家陽台不斷出現米奇老鼠,立刻清理陽台所有東西,然後又跟市政部門反映問題,可是情況還沒有好轉,米老鼠來完一隻又一隻,我爸陽台在老鼠界應該是網紅打卡聖地(誤),要不然就是米奇老鼠版米奇林三星餐廳(?) 雖然我們抓到了三隻,到上兩個禮拜為止還有至少一隻一直抓不到,每天淩晨還會來吃事後煙留下老鼠屎,真_北。 這隻老鼠對傳統攻擊有抗性,有IT9朋友前陣子用Raspberry pi自製了一台electric mouse trap ,用pi的超聲波雷達放在鞋盒裡,鞋盒裡有一堆食物,底部佈了鐵網,偵測到有老鼠進去以後立即關門通9V電,通個1分鐘再放牠離開,大推我自己也造一台 (Youtube片搜尋一大堆,人類真變態啊,朋友好變態啊)。可是我覺得這樣又好像有點太殘忍,不如先偵測牠們什麼時候來,嚇嚇牠們看看有沒有效果再說吧。 目的: 用Raspberry pi及手上有的感測器弄一隻放陽台用來偵測和嚇嚇老鼠的東西,並把紀錄圖像化到雲端給老爸使用。 邏輯及設計: 當老鼠進入偵測範圍,Motion Sensor偵測到生物活動Raspberry pi 處理來自Motion Sensor的訊號,如果夠強的話開始準備作出回應 Raspberry pi在Angry cats sounds中隨機選出叫聲,再經由Speaker輸出貓叫聲 Raspberry pi指示強光元件發出強光束照射目標 把偵測計數上傳到雲端圖表 材料: Sensor 在網路上看了一些Raspberry pi wild animal camera ,很多也是用Motion Sensor先偵測動物再來,我用的是PIR Motion Sensor被動式紅外線感測器,有低耗電成本便宜的好處。[1],而且可手動調整靈敏度及反應時間。 PIR Motion Sensor就是下面這個 圖片來源: learn.adafruit.com 可手動調整敏感度還有反應時間,這個有點不好調,要試好多遍才找到最佳位置。 可以在Raspbian中輸入pinout查詢GPIO避免插錯 圖片來源: learn.adafruit.com . 一台Raspberry pi 這次使用較舊的Raspberry pi model B+ 萬一老鼠生氣被咬爛錢包也不太痛 . ...
如何建立Windows服務
根據Wiki的解釋, Windows服務(Windows Service) 是在Windows系統架構下長期運行去執行某一特定功能,而且不需要有人機互動的一種背景程式。具有不需使用者登入系統也可以自動開始結束的特性。
現在動手做做看吧!
參考資料:
1. http://en.wikipedia.org/wiki/Windows_service Wiki Windows Service
2.http://msdn.microsoft.com/en-us/library/zt39148a(v=vs.80).aspx Walkthrough: Creating a Windows Service Application in the Component Designer
3. http://kmmr.pixnet.net/blog/post/33002186-%E4%BD%BF%E7%94%A8visual-studio(c%23)%E6%92%B0%E5%AF%ABwindows-service 使用Visual Studio(C#)撰寫Windows Service
根據Wiki的解釋, Windows服務(Windows Service) 是在Windows系統架構下長期運行去執行某一特定功能,而且不需要有人機互動的一種背景程式。具有不需使用者登入系統也可以自動開始結束的特性。
現在動手做做看吧!
- 開啟VS2012, 新增專案, 選擇 "Windows服務" 為專案類型。
- 在"屬性"頁中找到"ServiceName", 這是服務名稱, 要記得同一台伺服器服務名稱不能重覆喔。其他的參數用預設的就OK了。
- 開啟專案畫面後沒有Winform或ASP.net的interface Designer(廢話, 服務跟本就沒介面啊TAT), 在畫面點擊兩下跳到後面程式碼(cs檔案頁面), 看到OnStart及OnStop兩種方法。故名思義OnStart就是服務啟動時做的事,OnStop就是當關閉服務時要做的事。記得每次觸發OnStart跟OnStop的時候程式碼只會跑一次。即是說如果今天你要寫monitoring的東西,在OnStart中應該加入像System.Timers.Timer類別 ,不然跑一次就進入無限等待的狀態。現在用把資料庫的數據生成XML的例子放到這個服務:
- 要使用Timer類別, msdn很清楚的說明
Timer 元件是伺服器端之計時器,讓您可指定應用程式中引發 Elapsed 事件的週期間隔。所以我們一定要設定好Elapsed事件,還有計時器的時間間隔。先新增一個Timer物件
- 在服務(Service)的OnStart中,設定Timer中Elapsed的ElapsedEventHandler timer_Elapsed。
- 在服務(Service)的OnStart中,設定timer的週期間隔 timer.Interval 為一小時
- 加用啟動timer程式碼。
timer.Start(); - 接下來把存取資料庫轉成XML的程式碼放到 timer_Elapsed方法裡.
- 弄完OnStart事件,在OnStop中加入關閉timer的程式碼
// 關閉timer1 timer.Stop();
- 基本上邏輯部分就大功告成了,關於try catch等下再說明,現在加入安裝程式
- 在設計頁面中,按一下滑鼠右鍵,選擇 "加入安裝程式",會產生 "serviceProcessInstaller" 跟 "serviceInstaller" 兩個控件來控制安裝.
- 先按一下serviceInstaller, 檢查屬性(properties)中ServiceName一項名稱是否正確。
- 如果想要服務在開機的時候也起動,在屬性中把StartType轉為"Automatic"。
- 在Description中填入這項服務的描述。
- 接下來按一下serviceProcessInstaller,在屬性中把Account設為LocalService,即是說不用使用者登入也可以啟動服務。它在選項中權限最低。
- 最後,在方案總管(Solution Explorer)中在你的專案中按下右鍵,選擇屬性,選擇啟始物件為你的專案,然後儲存。
- 按下CTRL+SHIFT+B, 建置專案。
- 所有東西建立好之後終於可以安裝使用了(淚)
- 先找到位於.net Framework下的InstallUtil.exe,這是利用console安裝服務用的。
- 打開cmd,跑到上面的位置。
- 輸入InstallUtil <服務名稱>。例如我的服務檔案放在C:\Documents and Settings\xxxx\My Documents\Visual Studio 2010\Projects\xmlService\xmlService\bin\Debug\xmlService.exe,
那輸入的就是 InstallUtil "C:\Documents and Settings\xxxx\My Documents\Visual Studio 2010\Projects\xmlService\xmlService\bin\Debug\xmlService.exe" - 如安裝成功,會出現"已經成功完成認可階段。"及"已經完成交易性的安裝。"兩句。
- 最後跑到控制台->系統管理工具->服務,應該可以看到自己的服務了。
- 要移除的話,只要像step 6一樣,在InstallUtil 後面加入 /u 就可以了。
/*讀取資料庫上的資料放到dataset, 再把讀取的資料存到xml檔案中*/
//先建立connection
string connstr = @"Data Source=localhost;Initial Catalog=xxx;Persist Security Info=True;user ID=xxx;Password=xxx";
SqlConnection conn = new SqlConnection(connstr);
conn.Open();
//設好SQL查詢
string sql = "SELECT * FROM xxx";
//把SQL查詢放在adapter裡
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
DataSet ds = new DataSet();
//把data adapter的資料放到DataSet
da.Fill(ds, "xxx");
//利用DataSet的方法產生XML檔案
ds.WriteXml("D:/abc.xml");
//完成產生後釋放資源
ds.Dispose();
da.Dispose();
conn.Dispose();
conn.Close();
1. http://en.wikipedia.org/wiki/Windows_service Wiki Windows Service
2.http://msdn.microsoft.com/en-us/library/zt39148a(v=vs.80).aspx Walkthrough: Creating a Windows Service Application in the Component Designer
3. http://kmmr.pixnet.net/blog/post/33002186-%E4%BD%BF%E7%94%A8visual-studio(c%23)%E6%92%B0%E5%AF%ABwindows-service 使用Visual Studio(C#)撰寫Windows Service
Comments
Post a Comment