同事報案在Server2012R2環境測試Windows Form程式指定在背景下(session 0)執行時看不到UI,已經確認互動偵測服務(Interactive Services Detection)啟動,Windows排程啟動程式後,在工作管理員(Task manager)也在Background process看到程式閃耀著,但切到背景下(session 0)查看UI時卻看不到?
事故現場: Session 0沒發現程式的UI(我們用小算盤程式當Windows form程式範例)
但工作管理員可以看到活在當下的小算盤
解決方式
解決方式是透過遠端處理執行程式PsExec啟動程式並指定程式在桌面下的sesssion 0執行。
PsExec下載
可以從微軟technet網站下載PSTools或是從sysinternals網站下載psexec.exe(remote process執行程式) ,解壓縮PSTools後
將PsExec複製到C:\Windows\System32(或是喜歡的路徑)
GET!接著準備設定排程
設定Windows並執行排程(CLI)
使用SchTasks建立排程,指定程式在session 0啟動執行
SchTasks /Create /SC DAILY /TN "StartCalcWithPsExec" /TR "C:\Windows\System32\Psexec.exe -si 0 calc" /ST 09:00 /IT /RL HIGHEST /RU 我是帳號/RP "我是密碼"
執行排程
SchTasks /Run /TN "StartCalcWithPsExec"
一執行排程,Windows station桌面上就出現互動服務訊息
點上方訊息視窗的view the message或是 執行以下指令切換到session 0:
rundll32 winsta.dll,WinStationSwitchToServicesSession
出現小算盤UI了
開天眼成功~
同事報案的程式是從其他部門借來使用的,是厲害的老同事在10年前開發,解決許多測試流程的問題,只是在客戶端使用時,需要限制在背景下服務,在2012年以後的Windows 版本(Windows Server 2012R2,2016/Windows 8.1,10)沒法直接在背景下執行使用UI,幸好PsExec還能解。
找同事k改寫成CLI:)
參考
PsTools
https://technet.microsoft.com/en-us/sysinternals/bb896649
sysinternals
https://live.sysinternals.com/
Command line front-end for Windows' Task Scheduler
http://www.robvanderwoude.com/schtasks.php#Run