第一篇文章來點實(xie)用(e)的東西吧~
1 需求來源
某IDE從某個版本開始不能通過輸入序列號的方式來免費使用了傲宜,而是需要運行一個License Server星立。把這個License Server部署在云端鳄厌,一次設(shè)置就可以方便使用了痹届,但是放云端容易被和諧魄眉」砝可喜的是它可以放在自己電腦上晰奖,但是每次使用IDE就要先運行Server谈撒,還一直有個黑窗口掛在那。
自己看著辦吧
1)本地部署驗證服務(wù)器匾南,長期有效啃匿;
2)在云端部署驗證,容易被和諧蛆楞;
OMG...這簡直不能忍啊溯乒,于是乎想到了可以把認證服務(wù)器注冊成Windows服務(wù),每次開機自動啟動豹爹,也告別黑窗口(就和Apache httpd一樣)裆悄。自認為這是一個非常完美的方案,賊哈哈哈哈哈~
網(wǎng)上一番搜索得到了下面的內(nèi)容帅戒。
2 手動添加服務(wù)
這里提供一個大概的步驟灯帮,可以保證手動完成工作,但不會做什么解釋逻住。不要忘了文章歸類于PyToolkit钟哥,這是代碼的技術(shù)貼。
1)打開注冊表
Win+R: regedit
Windows服務(wù)所在的配置位于
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
2)新建 - 項(key)
這個項下面配置服務(wù)相關(guān)的信息瞎访,也就是下面的一堆“值”腻贰。
3)新建 - 值
- DisplayName:服務(wù)的名字
- 類型:字符串值
- 取值:自己寫
- ImagePath:服務(wù)程序(exe)的路徑
- 類型:字符串值
- 取值:放哪兒寫哪兒
- Start:啟動類型(重點,自動啟動全靠它)
- 類型:DWORD
- 取值:2(16進制)
- Type
- 類型:DWORD
- 取值:10(16進制)
- ErrorControl
- 類型:DWORD
- 取值:1(16進制)
3 Python自動化
能用程序做的事就不要讓人去做扒秸,易出錯還效率低
寫了一堆終于到了正題播演,用程序來自動處理這種事情。Python標(biāo)準(zhǔn)庫中提供了winreg模塊來操作注冊表伴奥,下面介紹下用到的幾個API写烤。
1) winreg.CreateKey(key, sub_key)
# 創(chuàng)建一個項
# key:這里要使用預(yù)定義常量,winreg.HKEY_LOCAL_MACHINE拾徙,它對應(yīng)著注冊表的第一級結(jié)構(gòu)
# sub_key:對應(yīng)第二級以后的結(jié)構(gòu)
# return:它返回一個PyHKEY對象洲炊,是后面處理值的基礎(chǔ)
2)winreg.SetValueEx(key, value_name, reserved, type, value)
# 添加、修改值的內(nèi)容
# key:一個已經(jīng)打開的Key,也就是前面的PyHKEY對象
# value_name:值的名字暂衡,比如我們這要用到的DisplayName询微、ImagePath這些
# reserved:固定填0
# type:值的類型,使用預(yù)定義常量winreg.REG_XXX這些
# value:數(shù)值數(shù)據(jù)狂巢,根據(jù)前面的"取值"填寫
3)winreg.QueryValueEx(key, value_name)
# 查詢一個值的數(shù)據(jù)撑毛。注意如果要查詢的值不存在,會拋異常唧领。
# 參數(shù)含義和SetValueEx的一樣
程序?qū)崿F(xiàn)非常簡單藻雌,就不貼代碼了,感興趣可以去我Coding倉庫查看完整代碼疹吃。別問我為毛不用github蹦疑,我是不會說家里連不上的Orz......
和注冊服務(wù)相關(guān)的就兩個文件西雀,inst_srv.py里是服務(wù)注冊的邏輯實現(xiàn)萨驶; inst_srv_enums.py 這里定義了幾個枚舉,對應(yīng)Windows里的取值艇肴,有比較詳細的注釋說明每個取值代表的含義腔呜。