CN108897580A - 一种关机执行任务的方法 - Google Patents
一种关机执行任务的方法 Download PDFInfo
- Publication number
- CN108897580A CN108897580A CN201810765552.XA CN201810765552A CN108897580A CN 108897580 A CN108897580 A CN 108897580A CN 201810765552 A CN201810765552 A CN 201810765552A CN 108897580 A CN108897580 A CN 108897580A
- Authority
- CN
- China
- Prior art keywords
- shutdown
- script
- service
- task
- code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/442—Shutdown
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种关机执行任务的方法,其特征在于:所述方法包括服务控制码关机阻塞方法和组策略关机脚本关机阻塞方法,所述服务控制码关机阻塞方法适用于Windows Vista以上版本,所述组策略关机脚本关机阻塞方法适用于Windows Vista以下版本。本发明只有在执行完任务之后系统才会关机,使得用户在不使用电脑的时间段执行繁重的任务,不再占用用户使用电脑的时间。
Description
技术领域
本发明属于计算机领域,具体来说,涉及服务程序相关控制码与组策略相关操作来实现Window Vista以上及以下版本的系统的阻塞关机方法。
背景技术
随着进入互联网时代,人们越来越离不开个人计算机。随着人们热衷于使用电脑,有些如系统更新,系统磁盘备份等需要占用大量计算机资源的操作往往会打扰并占用自己使用电脑的时间。如何在自己不使用电脑的时间段执行繁重任务,能采用的方式一般是在系统关机的时候去执行这类任务了。
系统在关机的时候会向所有的程序发送关机消息,通知并让其关闭。出于防止某些恶意软件阻止用户关机的目的,Windows Vista以上的系统会等待几秒后就会强制结束所有的程序。仅仅只用这几秒的事件是不足够完成那些工作量巨大的任务的。
因此,如何阻塞系统关机并执行自己的任务成了关键。
发明内容
本发明为了实现阻塞系统关机并执行自己的任务的目的,提供了一种关机执行任务的方法,通过该方法,系统只有在执行完任务之后才会关机,使得用户在不使用电脑的时间段执行繁重的任务,不再占用用户使用电脑的时间。
一种关机执行任务的方法,其特征在于:所述方法包括服务控制码关机阻塞方法和组策略关机脚本关机阻塞方法,所述服务控制码关机阻塞方法适用于Windows Vista以上版本,所述组策略关机脚本关机阻塞方法适用于Windows Vista以下版本;
所述服务控制码关机阻塞方法包括如下步骤:
步骤1,用CreateService创建一个服务;
步骤2,通过ChangeServiceConfig2 API设置预关机最大等待时间;
步骤3,设置SERVICE_ACCEPT_PRESHUTDOWN控制码;
步骤4,注册ServiceCtrlHandlerEx;
步骤5,等待关机时服务管理器发来SERVICE_CONTROL_PRESHUTDOWN通知;
执行任务的过程中需要不停的通过SetServiceStaus通知服务管理器任务还在执行中;
所述组策略关机脚本关机阻塞方法包括如下步骤:
步骤Ⅰ,将需要执行的脚本文件路径以及参数写入Scripts.ini中;
步骤Ⅱ,定位关机脚本注册表位置;
步骤Ⅲ,创建关机脚本注册表,并设置参数的名与值;
步骤Ⅳ,将最大等待时间写入Registry.pol;
步骤Ⅴ,定位脚本最大等待时间的注册表位置;
步骤Ⅵ,设置注册表中名为“MaxGPOScriptWait”的值。
步骤4的具体注册方法为:在声明服务控制码通知回调方法ServiceCtrlHandlerEx里,写好SERVICE_CONTROL_PRESHUTDOWN的控制码判断和处理代码,然后拿该控制码通知回调方法通过RegisterServiceCtrlHandlerEx去注册。
步骤Ⅰ中,需要执行的脚本文件路径以及参数按照如下格式通过文件读写的方式Scripts.ini中:
[Shutdown]
0CmdLine=XX
0Parameters=
[Shutdown]
1CmdLine=XX
1Parameters=。
步骤Ⅰ中,同时还需要通过Reg Api对注册表更新关机脚本信息。
步骤Ⅱ,定位到关机脚本的注册表位置:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts\Shutdown\0。
步骤Ⅲ,具体方法为:通过RegCreateKeyEx用序号作为键名创建和打开创建关机脚本的注册表,其后用RegSetValueEx设置关机脚本各项参数,其中主要值键名分别为“Script”、“Parameters”和“ExecTime”。
步骤Ⅳ,将最大等待时间写入Registry.pol的具体方法为:
先是读取Registry.pol里的内容并查找关键字MaxGPOScriptWait,如果有,则在后面修改等待时间数值;如果没有,则在文件末尾构建MaxGPOScriptWait内容,
步骤Ⅵ具体方法为:注册位置在HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System下通过RegSetValueEx设置名为“MaxGPOScriptWait”的值。
本发明相对于现有技术具有如下有益效果:本发明通过服务控制码关机阻塞方法来控制Windows Vista以上版本在执行完任务之后才会关机,通过组策略关机脚本关机阻塞方法来控制 Windows Vista以下版本在执行完任务之后才会关机;通过这两种方法的结合完全可以使得Windows Vista以上和以下版本在用户不使用电脑关机后执行繁重的任务,不再占用用户使用电脑的时间。
附图说明
图1-图3为本发明服务控制码关机阻塞方法流程图;
图4为本发明组策略关机脚本关机阻塞方法流程图。
具体实施方式
如图1-图3所示,通过服务控制码实现Windows Vista以上版本的关机阻塞方法:
首先用CreateService创建一个服务,通过ChangeServiceConfig2 API设置预关机等待时间(具体操作方法如下):
SERVICE_PRESHUTDOWN_INFO spi;
spi.dwPreshutdownTimeout = 0x7FFFFFFF;
ChangeServiceConfig2(schService,SERVICE_CONFIG_PRESHUTDOWN_INFO, &spi);
然后服务启动前就先设置好SERVICE_ACCEPT_PRESHUTDOWN控制码:
static SERVICE_STATUS status;
status.dwControlsAccepted|= SERVICE_ACCEPT_PRESHUTDOWN;
在声明服务控制码通知回调方法ServiceCtrlHandlerEx里,写好SERVICE_CONTROL_PRESHUTDOWN的控制码判断和处理代码。然后拿该控制码通知回调方法通过RegisterServiceCtrlHandlerEx去注册就可以了:
DWORD WINAPI CServiceBase::ServiceCtrlHandlerEx( DWORD dwControl, DWORDdwEventType, LPVOID lpEventData, LPVOID lpContext)
{
switch (dwControl)
{
case SERVICE_CONTROL_PRESHUTDOWN:
···处理代码;
break;
}
}
·
·
statusHandle = RegisterServiceCtrlHandlerEx(
s_service->m_name, ServiceCtrlHandlerEx, NULL);
以上准备工作都做好后,就只需要等待关机时服务管理器发来SERVICE_CONTROL_PRESHUTDOWN通知了。
关机任务执行时还要注意一点:执行过程中需要不停的通过SetServiceStaus通知服务管理器任务还在执行中,
status.dwCurrentState = SERVICE_STOP_PENDING;
SetServiceStatus(statusHandle, &status);
之后就能高枕无忧的执行任务了。
以上就是通过服务控制码实现Windows Vista以上版本的关机阻塞方法所有代码流程。
如图4所示,通过关机脚本实现关机阻塞方法:
首先模拟组策略关机脚本设置流程,现将需要执行的脚本文件路径以及参数按照上文格式通过文件读写的方式写入Scripts.ini中。
[Shutdown]
0CmdLine=XX
0Parameters=
[Shutdown]
1CmdLine=XX
1Parameters=
同时还需要通过Reg Api对注册表更新关机脚本信息。定位到关机脚本的注册表位置HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts\Shutdown\0,通过RegCreateKeyEx用序号作为键名创建和打开创建关机脚本的注册表。其后用RegSetValueEx设置关机脚本各项参数,其中主要值键名分别为“Script”、“Parameters”和“ExecTime”。完成这些,关机脚本就设置好了。
需要注意的是Scripts.ini中关机脚本参数前的数字代表的是关机脚本的序号。更新注册表时,也需要按照关机脚本的序号创建键名。
用同样的方式,删除Scripts.ini与注册表位置的关机脚本内容,来还原组策略的关机脚本设置。这时也需要注意关机脚本的序号的问题,保持序号连续且不断。
关机最大等待时间的设置也是通过文件读写的方式将最大等待时间的值写入Registry.pol。先是读取Registry.pol里的内容并查找关键字MaxGPOScriptWait,如果有,则在后面修改等待时间数值;如果没有,则在文件末尾构建MaxGPOScriptWait内容,格式如下:
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
00000000 50 52 65 67 01 00 00 00 5B 00 53 00 6F 00 66 00 PReg [ S o f
00000010 74 00 77 00 61 00 72 00 65 00 5C 00 4D 00 69 00 t w a r e \ M i
00000020 63 00 72 00 6F 00 73 00 6F 00 66 00 74 00 5C 00 c r o s o f t \
00000030 57 00 69 00 6E 00 64 00 6F 00 77 00 73 00 5C 00 W i n d o w s \
00000040 43 00 75 00 72 00 72 00 65 00 6E 00 74 00 56 00 C u r r e n t V
00000050 65 00 72 00 73 00 69 00 6F 00 6E 00 5C 00 50 00 e r s i o n \ P
00000060 6F 00 6C 00 69 00 63 00 69 00 65 00 73 00 5C 00 o l i c i e s \
00000070 53 00 79 00 73 00 74 00 65 00 6D 00 00 00 3B 00 S y s t e m ;
00000080 4D 00 61 00 78 00 47 00 50 00 4F 00 53 00 63 00 M a x G P O S c
00000090 72 00 69 00 70 00 74 00 57 00 61 00 69 00 74 00 r i p t W a i t
000000A0 00 00 3B 00 04 00 00 00 3B 00 04 00 00 00 3B 00 ; ; ;
000000B0 58 02 00 00 5D 00 X ]
B0~B3位就是最大等待时间数值,数值类型为DWORD。同样,在注册表方面,位置在HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System下通过RegSetValueEx设置名为“MaxGPOScriptWait”的值就可以了。
这样,所有的关机脚本操作就完成了。
Claims (9)
1.一种关机执行任务的方法,其特征在于:所述方法包括服务控制码关机阻塞方法和组策略关机脚本关机阻塞方法,所述服务控制码关机阻塞方法适用于Windows Vista以上版本,所述组策略关机脚本关机阻塞方法适用于Windows Vista以下版本;
所述服务控制码关机阻塞方法包括如下步骤:
步骤1,用CreateService创建一个服务;
步骤2,通过ChangeServiceConfig2 API设置预关机最大等待时间;
步骤3,设置SERVICE_ACCEPT_PRESHUTDOWN控制码;
步骤4,注册ServiceCtrlHandlerEx;
步骤5,等待关机时服务管理器发来SERVICE_CONTROL_PRESHUTDOWN通知;
执行任务的过程中需要不停的通过SetServiceStaus通知服务管理器任务还在执行中;
所述组策略关机脚本关机阻塞方法包括如下步骤:
步骤Ⅰ,将需要执行的脚本文件路径以及参数写入文件Scripts.ini中;
步骤Ⅱ,定位关机脚本注册表位置;
步骤Ⅲ,创建关机脚本注册表,并设置参数的名与值;
步骤Ⅳ,将最大等待时间写入文件Registry.pol;
步骤Ⅴ,定位脚本最大等待时间的注册表位置;
步骤Ⅵ,设置注册表中名为“MaxGPOScriptWait”的值。
2.根据权利要求1所述的一种关机执行任务的方法,其特征在于:步骤4的具体注册方法为:在声明服务控制码通知回调方法ServiceCtrlHandlerEx里,写好SERVICE_CONTROL_PRESHUTDOWN的控制码判断和处理代码,然后拿该控制码通知回调方法通过RegisterServiceCtrlHandlerEx去注册。
3.根据权利要求1所述的一种关机执行任务的方法,其特征在于:步骤5中,在接收到了服务管理器发来的SERVICE_CONTROL_PRESHUTDOWN通知后,还需要不停的通过SetServiceStaus通知服务管理器任务还在执行中,以此阻塞系统关机,直到任务执行结束。
4.根据权利要求1所述的一种关机执行任务的方法,其特征在于:步骤Ⅰ中,需要执行的脚本文件路径以及参数按照如下格式通过文件读写的方式Scripts.ini中:
[Shutdown]
0CmdLine=XX
0Parameters=
[Shutdown]
1CmdLine=XX
1Parameters=。
5.根据权利要求1所述的一种关机执行任务的方法,其特征在于:步骤Ⅰ中,同时还需要通过Reg Api对注册表更新关机脚本信息。
6.根据权利要求1所述的一种关机执行任务的方法,其特征在于:步骤Ⅱ,定位到关机脚本的注册表位置:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts\Shutdown\0。
7.根据权利要求1所述的一种关机执行任务的方法,其特征在于:步骤Ⅲ,具体方法为:通过RegCreateKeyEx用序号作为键名创建和打开创建关机脚本的注册表,其后用RegSetValueEx设置关机脚本各项参数,其中主要值键名分别为“Script”、“Parameters”和“ExecTime”。
8.根据权利要求1所述的一种关机执行任务的方法,其特征在于:步骤Ⅳ,将最大等待时间写入Registry.pol的具体方法为:
先是读取Registry.pol里的内容并查找关键字MaxGPOScriptWait,如果有,则在后面修改等待时间数值;如果没有,则在文件末尾构建MaxGPOScriptWait内容。
9.根据权利要求1所述的一种关机执行任务的方法,其特征在于:步骤Ⅵ具体方法为:注册位置在HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System下通过RegSetValueEx设置名为“MaxGPOScriptWait”的值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810765552.XA CN108897580A (zh) | 2018-07-12 | 2018-07-12 | 一种关机执行任务的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810765552.XA CN108897580A (zh) | 2018-07-12 | 2018-07-12 | 一种关机执行任务的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108897580A true CN108897580A (zh) | 2018-11-27 |
Family
ID=64349375
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810765552.XA Pending CN108897580A (zh) | 2018-07-12 | 2018-07-12 | 一种关机执行任务的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108897580A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112416659A (zh) * | 2020-12-09 | 2021-02-26 | 成都傲梅科技有限公司 | 一种实现关机时数据备份的方法 |
CN112416658A (zh) * | 2020-12-09 | 2021-02-26 | 成都傲梅科技有限公司 | 一种关机备份的方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103034577A (zh) * | 2011-10-08 | 2013-04-10 | 腾讯科技(深圳)有限公司 | 一种定位关机慢的方法及装置 |
AU2015242956A1 (en) * | 2010-11-18 | 2015-10-29 | Google Llc | Delayed shut down of computer |
CN105183520A (zh) * | 2015-09-21 | 2015-12-23 | 赵伟 | 计算机软件远程自动化装调方法及系统 |
CN105511883A (zh) * | 2015-12-14 | 2016-04-20 | 浪潮电子信息产业股份有限公司 | 一种关闭计算机的方法 |
CN105930192A (zh) * | 2016-05-03 | 2016-09-07 | 北京金山安全软件有限公司 | 一种服务创建方法及装置 |
-
2018
- 2018-07-12 CN CN201810765552.XA patent/CN108897580A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
AU2015242956A1 (en) * | 2010-11-18 | 2015-10-29 | Google Llc | Delayed shut down of computer |
CN103034577A (zh) * | 2011-10-08 | 2013-04-10 | 腾讯科技(深圳)有限公司 | 一种定位关机慢的方法及装置 |
CN105183520A (zh) * | 2015-09-21 | 2015-12-23 | 赵伟 | 计算机软件远程自动化装调方法及系统 |
CN105511883A (zh) * | 2015-12-14 | 2016-04-20 | 浪潮电子信息产业股份有限公司 | 一种关闭计算机的方法 |
CN105930192A (zh) * | 2016-05-03 | 2016-09-07 | 北京金山安全软件有限公司 | 一种服务创建方法及装置 |
Non-Patent Citations (3)
Title |
---|
EREN: "《how to delay shutdown and run a process in window service》", 《HTTPS://STACKOVERFLOW.COM/QUESTIONS/5217246/HOW-TO-DELAY-SHUTDOWN-AND-RUN-A-PROCESS-IN-WINDOW-SERVICE》 * |
傲意工作室编著: "《注册表完全操作1500例 注册表配置、优化、备份、修复万用手册》", 30 June 2003, 重庆出版社 * |
武新华,孙世宁等编著: "《黑客命令与典型应用》", 30 June 2009, 中国铁道出版社 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112416659A (zh) * | 2020-12-09 | 2021-02-26 | 成都傲梅科技有限公司 | 一种实现关机时数据备份的方法 |
CN112416658A (zh) * | 2020-12-09 | 2021-02-26 | 成都傲梅科技有限公司 | 一种关机备份的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10331525B2 (en) | Cluster file server proxy server for backup and recovery | |
EP1012720B1 (en) | Detection and elimination of macro viruses | |
US9635138B2 (en) | Client-server input method editor architecture | |
US6694457B2 (en) | System and method for monitoring execution of privileged instructions | |
JP4688862B2 (ja) | 仮想マシン環境における仮想マシンのシングルステップ機能のサポートを提供すること | |
EP1939747B1 (en) | Method and computer system for managing performance of a storage network | |
JP5719431B2 (ja) | コンテキストを認識するためのデータを保護するための方法、並びに、そのデータ処理システム、及びコンピュータ・プログラム | |
TW200813833A (en) | Launching hypervisor under running operating system | |
US20150161406A1 (en) | Desktop redaction and masking | |
TW200527195A (en) | Mechanism to control hardware interrupt acknowledgement in a virtual machine system | |
US6957363B2 (en) | Method and apparatus for controlling the termination of processes in response to a shutdown command | |
CN108897580A (zh) | 一种关机执行任务的方法 | |
US9009777B2 (en) | Automatic role activation | |
US11704139B2 (en) | Service processing method and apparatus, electronic device, and storage medium | |
JP2007528084A (ja) | 仮想マシン環境におけるゲストソフトウェアの実行中にオープン・イベント・ウィンドウの認識を容易にする方法および装置 | |
CN108256332A (zh) | 一种基于ipmi命令的bios开机密码设置的方法 | |
US20080154574A1 (en) | Application emulation on a non-production computer system | |
WO2012155844A1 (zh) | 自动移除代码的方法及装置 | |
CN101369258B (zh) | 输入输出控制系统 | |
CN105975265B (zh) | 一种基于改进型mvp模式的装置 | |
US8868979B1 (en) | Host disaster recovery system | |
WO2017016139A1 (zh) | 一种系统还原方法与装置 | |
CN102902913B (zh) | 防止恶意破坏计算机内的软件的保全方法 | |
JP6561555B2 (ja) | 情報処理装置、動作検証方法及び動作検証プログラム | |
TWI587166B (zh) | 電腦系統 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20181127 |