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被认为是不需要用户交互。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本