從解決 RDP 盲操作到折騰 MS Store 上架:RDP Heartbeat 誕生記
2026-03-29
Tags: 開發手記 · 產品 · RDP · Windows
前言:Vibe Coding 時的「不速之客」
我經常會連著一台走 UDP 協定的 RDP(遠端桌面)機器寫程式碼,進入那種專注而放鬆的「vibe coding」狀態。
在這個過程中,不可避免地會遇到一些耗時的操作:比如等待一個回應遲緩的 API,或者腳本正在背景進行漫長的靜默處理。這時候,螢幕上的畫面定格在一個視窗很久,這再正常不過了。通常我都不去管它,切出去看看網頁,或者靠在椅背上等它自己跑完。
但後來我發現了一個讓人極其抓狂的現象:有時候任務其實早就跑完了,只是我的 RDP 畫面徹底卡住了。
我不確定純 TCP 連線下是不是也有這個毛病(畢竟 TCP 延遲相對較高,我更偏愛 UDP 的絲滑),但在 UDP 模式下,這種「薛丁格的假死」確確實實存在。
最糟糕的設定:它沒有斷開,它只是瞎了
如果網路不好,RDP 直接彈個窗告訴我「連線已斷開」,那倒反而是件好事——至少我知道該重連了。
但最折磨人的是,畫面雖然不再更新,但鍵盤和滑鼠事件居然還是回應的!
想像一下那個畫面:我看著一個靜止的螢幕,以為腳本還沒跑完。等得不耐煩了,試探性地動動滑鼠,畫面毫無波瀾。我又盲目地胡亂點了幾下,敲了幾次 Enter,企圖喚醒它……結果依然是一片死寂。
最後,只能無奈地手動關掉 RDP 視窗,再重新連回去。連上之後才驚恐地發現,**剛才那幾下「盲狙」和亂敲,全都在遠端機器上真實執行了。**這種失去視覺回饋的操作,簡直是開發者的噩夢。
不要複雜的面板,只要一眼的安心
面對這個問題,我的訴求其實極其簡單且純粹:我只想要一個小東西,讓它永遠安靜地浮在螢幕的角落裡。
只要它在閃,我就知道畫面還在即時更新,可以安心地繼續等 API 回應;如果它卡住不動了,我就能立刻反應過來:「哦,又假死了,該重連了」,從而完美避開一波盲目操作的災難。
一個意外之喜:玄學般的「保活」效果
於是,RDP Heartbeat 誕生了。它被設計得盡可能沒有存在感——支援滑鼠穿透,絕對不干擾正常操作。它唯一的使命,就是為您提供遠端工作時最需要的那一點點「視覺確認感」。
但有趣的事情發生了:在有了它之後,我發現 RDP 畫面假死的情況竟然極少發生了。
這完全是個意外之喜。我個人的猜測是:因為這個呼吸燈在螢幕角落一直在進行像素級的重新整理,這種持續的畫面更新反而成了一種應用層的「Keep-alive」機制,讓 RDP 工作階段一直保持著活躍的資料流。不過誠實地說,我並沒有去深入研究底層的網路協定機制,所以不敢妄下斷言。總之,它就是玄學般地好用了。
既然做都做了,不如上架吧(以及踩過的坑)
看著這個在角落裡默默閃爍的小東西,我覺得既然做都做了,說不定其他深受其害的開發者也能用上,於是決定把它上架到 Microsoft Store。
事實證明,這是一個極其折磨人的決定。
因為我是用 Python 寫的,整個打包上架流程簡直是一部血淚史:Python 原始碼 → PyInstaller 打包為 exe → Inno Setup 製作安裝包 → 最終轉成 MSIX package。相比於原生 WinUI 3 那種順滑的打包體驗,這套流程可以說是山路十八彎。
另外我也必須承認,用 Python 做的桌面應用程式,在視覺的精緻度上確實還差那麼一點意思。
未來的計畫
後面有時間的話,我打算寫一篇文章,詳細分享一下這套 Python 到 MSIX 的打包全流程。雖然它肯定不是最佳解,但至少是一條能走通的路,希望能幫到想把 Python 小工具上架商店的朋友。
至於 RDP Heartbeat 本身,我希望等手邊的其他專案告一段落後,能抽出時間用原生的 WinUI 3 將它徹底重構一遍,讓這個小小的呼吸燈變得更加絲滑、優雅。
如果你也經常面對靜止的遠端螢幕發呆,或者總是被 RDP 猝不及防的假死所折磨,不妨下載試試這個小玩意兒,希望它能幫你守護住每一次 vibe coding 時的好心情。