[UAC] Win10 IoT 無法傳遞 Window Message


公司用在現場監測的設備,一直是用 Embedded ,我剛到公司時,已經從 Win2k WorkStation 轉換到 WinXP Embedded SP3 (XPE 3) ,偶爾因為維護的時候會碰到 Win2k WS。中間曾經導入 WinCE 5.0/6.0 ,不過硬體不太行,還是退回去用 XPE 。

之後用 Windows Stanard Embedded (WSE / W7E) 取代 XPE ,為了方便起見,預設把 UAC 關閉,最近改用 Win10 IoT Enterprise 取代 W7E ,但在測試機一直有問題,大概在 1 ~ 7 天左右,不定時發生畫面停滯,連滑鼠、鍵盤都不回應。

原先硬體商認為是我公司的軟體問題,後來用空機跑 IE11 ,就會出問題,把重現步驟列給廠商後,廠商發現是 BIOS 不相容,原先的硬體跑 W7E 都沒事,但跑 Win10 IoT 就出問題,更新 BIOS 後,持續又測了一陣子後,終於把部分案場開始更新 Win10 IoT 。

作業系統啟動後,我設計是自動登入後,在啟動 (StartUp) 目錄放捷徑,捷徑設定視窗最小化後,自動顯示在系統工具列 (SysTray) 目錄,在由此程式依據設定檔掃描開機應該啟動的軟體、應縮小或關閉的視窗,逐步控制,完成畫面初始化。

在我檢視 IT 設定出場到現場的 Win10 IoT 後,忽然發現 TeamViewer 沒有依設定掃描結果最小化。雖然前景有其他軟體,但是偶爾可能閃現的 TeamViewer ,畫面上有可連線進入的帳號密碼,可能發生資安風險,所以開始檢查。

起先以為是設定錯誤,但是開啟我軟體畫面,的確有標記持續送出訊息給 TeamViewer 讓視窗最小化。

我的作法是 SendMessage ,想到 Win8 以後,UAC 無法關閉,所有軟體強制降階成 Users 群組權限去跑,就先把我軟體結束掉,改用滑鼠右鍵,以系統管理員身分執行,果然就可以正常操作視窗,看樣子就是 Users 群組權限執行的,已經不能用 SendMessage / PostMessage 到其他視窗了。

知道問題來源就可以測測看,但是發現,啟動目錄只能以 Users 群組權限執行,不管是透過捷徑或是將軟體設定為系統管理員身分,只要是以系統管理員身分執行的,就會被拋棄不執行。

後來在保哥這邊找到相關資訊:

如何在每次 Windows 登入時自動啟動需要以系統管理員身分執行的程式

也就是說改用工作排程來繞過啟動無法跑系統管理員身分的問題。

排程執行
排程執行

解決啟動問題後,又發現另一個問題,就是捷徑可以設定啟動視窗是否最小化,但是排程不行,排程去啟動捷徑也不行,就是 Normal Window。

只好又回頭改我公司軟體,考慮保存人工執行時為正常視窗,採命令列 (Command Line) 加入支援啟動時最小化,讓排程使用這個命令列,完成啟動時最小化。

有些在 Embedded 用的軟體,都要等整體規畫上去後,才會發現不相容阿~

Categories: 工作點滴, 技術分享 | 標籤: | 發表留言

文章分頁導航

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

在WordPress.com寫網誌.

%d 位部落客按了讚: