Windows计划任务的一个问题

Posted 平静的寄居者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows计划任务的一个问题相关的知识,希望对你有一定的参考价值。

我的办公桌朝东,早上太阳刺眼,需要适当提高屏幕亮度才能看清楚屏幕,过了一会儿太阳不直射了,又要降低屏幕亮度以保护视力。老是手工操作嫌烦,就写了个小程序,放进Windows计划任务(Task Scheduler)。小程序调试的时候一切正常,但从计划任务启动时却不工作。

开始怀疑是权限的问题。设置任务以管理员账号运行,还是不行。

干脆用启动命令行的方式:

ProcessStartInfo pinfo = new ProcessStartInfo(
    FileName = "cmd.exe",
    Arguments = "/c foo.exe");
Process.Start(pinfo);

却发现根本启动不了。

又查了不少资料,最后才偶然发现,原来问题出在一个小小的设置。计划任务缺省设置是Run whether the user is logged on or not,即不管用户是否登录都运行,改成只有登录了才运行,就一切正常了。查了下,如果程序需要用户交互,比如需要打开命令行窗口,或者打开一个图形程序等,就必须设置成只有用户登录了才运行。

但是我的程序并没有界面,只是通过pinvoke调用了user32.dll和dxva2.dll里的几个api,如EnumDisplayMonitors,GetNumberOfPhysicalMonitorsFromHMONITOR,GetPhysicalMonitorsFromHMONITOR,SetMonitorBrightness等。看来,这几个api被认为是需要用户交互。

另外调用的PowrProf.dll里的几个api如PowerWriteACValueIndex,PowerSetActiveScheme等,不需要设置成只有用户登录才运行。看来,这些api被认为是不需要用户交互。

windows计划任务的问题。

不知道大家遇到这样的情况没有:
我在windows的任务计划里面添加了一个任务,定时运行一个软件,但是不知道怎么的,到时间后,那个软件的确运行了,只不过软件没有出现窗体界面,只能在任务管理器里面看到进程,并且软件运行后似乎并没有执行它的代码,其实就相当于没有运行一样。不知道哪位高人能解释下原因,另外说说解决方法哈,谢谢咯。
对了,我用at命令添加的任务哈,看看有什么问题没:
at 8:25 /every:M,T,W,Th,F,S,Su %systemroot%\nao.exe

1、任务计划建立的任务的运行是前台的,而at命令建立的任务的运行是后台的,所以你看不到运行界面。
2、如果你坚持使用AT命令,那么在软件里面添加运行时给自己发送消息也可以实现你要的功能。
3、使用schtasks命令建立任务计划(使用帮助使用 schtasks /?命令查看),或者直接使用命令tasks 打开界面根据向导添加系统任务,推荐使用这种方法。
参考技术A 没放到位置上

以上是关于Windows计划任务的一个问题的主要内容,如果未能解决你的问题,请参考以下文章

Windows 2008 任务计划程序 - 其他用户无法运行任务

如何使用windows的计划任务?计划任务?

使用 Web.config 计划任务比使用 Windows 计划任务有啥好处

为 Windows 开发计划任务

Windows权限维持——计划任务

如何解决 Windows 计划任务未运行的问题?