首頁  >  文章  >  後端開發  >  使用 CreateProcessAsUserW() 從服務啟動時,Windows 計算器應用程式會因 WerFault 不一致而崩潰

使用 CreateProcessAsUserW() 從服務啟動時,Windows 計算器應用程式會因 WerFault 不一致而崩潰

PHPz
PHPz轉載
2024-02-05 22:51:071201瀏覽

使用 CreateProcessAsUserW() 从服务启动时,Windows 计算器应用程序会因 WerFault 不一致而崩溃

問題內容

Windows 服務是用Go 寫的,並嘗試使用CreateProcessAsUserW() 在使用者上下文中建立計算器進程。

它的程式碼的靈感來自於這個要點:

https://gist.github.com/LiamHaworth/1ac37f7fb6018293fc43f86993db24fc#file-native-go

大多數時候,計算器應用程式會在活動使用者中啟動;但是,有時應用程式啟動失敗,但 CreateProcessAsUserW() 不會回傳任何錯誤。

使用 Procmon 檢查發現,在啟動計算器應用程式時,該應用程式崩潰並訴諸於收集 WerFault 轉儲。不幸的是,我在事件日誌中沒有看到詳細的轉儲。

在 ProcMon 中觀察到 WerFault 崩潰

使用 CreateProcessAsUserW 啟動 3 個類似計算器應用程式的詳細堆疊追蹤 - 前兩個成功,第三個失敗

#

此錯誤本質上是隨機的,這並不會使應用程式變得可靠。我對從這裡調試什麼/如何調試非常一無所知,並且非常感謝您的幫助。


正確答案


該錯誤似乎是由於錯誤的編譯環境而發生的,其中使用 x64 創建的二進位檔案在arm64上運行。感謝大家的輸入

以上是使用 CreateProcessAsUserW() 從服務啟動時,Windows 計算器應用程式會因 WerFault 不一致而崩潰的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除