[.NET]Windows Form程式指定在背景下執行時看不到UI

同事報案在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