話不多說(shuō),小工具需求如下:
功能需求 -- 電腦開機(jī)后自動(dòng)執(zhí)行時(shí)間同步
非功能需求 -- 安裝執(zhí)行簡(jiǎn)單,無(wú)需安裝額外環(huán)境
一、代碼實(shí)現(xiàn)
基于以上需求,思路如下:訪問(wèn)網(wǎng)絡(luò)獲取北京時(shí)間,然后調(diào)用命令行來(lái)設(shè)置系統(tǒng)時(shí)間。程序?qū)懗蒞indows Service,并設(shè)置為開機(jī)自動(dòng)運(yùn)行。正好前段時(shí)間在學(xué)習(xí)Python,所以打算用Python來(lái)寫這個(gè)工具。具體代碼如下:
獲取網(wǎng)絡(luò)時(shí)間
二、部署安裝
為了讓Python程序能以Windows服務(wù)的方式運(yùn)行,需要用到py2exe(用來(lái)把Python程序編譯成exe)和Python Win32 Extensions 。(py2exe把Python代碼編譯成Winodws服務(wù)時(shí)依賴此組件)下載并安裝這兩個(gè)組件。安裝完畢后,在Python的安裝目錄下找到py2exe的Windows Service示例({PythonRoot}/Lib/site-packages/py2exe/samples/advanced/MyService.py)。然后仿照這個(gè)示例將上面的代碼完善一下。
Windows服務(wù)示例
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
def SvcDoRun(self):
import servicemanager
# Write a 'started' event to the event log...
win32evtlogutil.ReportEvent(self._svc_name_,
servicemanager.PYS_SERVICE_STARTED,
0, # category
servicemanager.EVENTLOG_INFORMATION_TYPE,
(self._svc_name_, ''))
# wait for beeing stopped...
win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE)
# and write a 'stopped' event to the event log.
win32evtlogutil.ReportEvent(self._svc_name_,
servicemanager.PYS_SERVICE_STOPPED,
0, # category
servicemanager.EVENTLOG_INFORMATION_TYPE,
(self._svc_name_, ''))
if __name__ == '__main__':
# Note that this code will not be run in the 'frozen' exe-file!!!
win32serviceutil.HandleCommandLine(SynctimeService)
Setup.py
編譯生成windows程序,如下圖:

然后在控制臺(tái)中運(yùn)行:setup.py py2exe ,一切順利的話會(huì)在當(dāng)前目錄下生成build和dist目錄。

控制臺(tái)目錄切換到dist目錄,找到synctime.exe,在命令行中運(yùn)行:
synctime.exe 主站蜘蛛池模板: 阿拉善右旗| 乌鲁木齐县| 哈密市| 黑龙江省| 伊金霍洛旗| 五莲县| 油尖旺区| 辛集市| 西安市| 麻阳| 水城县| 台北市| 中西区| 乳源| 上栗县| 德昌县| 中方县| 临武县| 罗山县| 泰州市| 北辰区| 洛南县| 阳泉市| 柳江县| 赞皇县| 鲁山县| 隆尧县| 日照市| 邛崃市| 琼结县| 江孜县| 岑溪市| 桐庐县| 宜阳县| 陈巴尔虎旗| 宾川县| 桓台县| 邵东县| 阿克苏市| 石首市| 湘阴县|