簡體   English   中英

如何從Windows的子進程中忽略阻止系統錯誤

[英]How to ignore blocking system errors from a child process on windows

我在Visual Studio 2015中運行一個C#應用程序。它接受任意可執行文件,並打開一個命令提示符,嘗試通過該文件運行它們。 但是,對於這些可執行文件沒有任何保證,因此可能會導致它們無法運行,並引發系統錯誤,例如“無法找到xxx.dll”。 有關特定示例,請參見此處 這些系統錯誤(窗口的標題有時顯示“ XXXXX.exe-系統錯誤”)阻止子進程結束,並且由於父進程正在等待子進程,因此它也阻止了父進程。 它會阻塞,直到有人可以出現並按下按鈕,讓子進程死亡而父進程繼續。 我需要在沒有人為干預的情況下自動做到這一點,最好是首先避免出現這些錯誤。 在線瀏覽時,我能夠通過使用regedit禁用Windows錯誤報告。 雖然這確實忽略了諸如“ XXXXX.exe已停止工作”之類的錯誤,但它並未忽略諸如我鏈接的系統錯誤之類的系統錯誤。 如何忽略這種錯誤?

您鏈接的錯誤消息顯示了DLL導入失敗,其中是通過id而不是其名稱加載函數的(通常是在您的程序是與預期版本不同的dll版本時發生)。 我不知道如何阻止此消息首先出現。

但是,由於子可執行文件仍在運行(顯示此對話框),您可以找到此窗口並從代碼中關閉它。

這很容易,因為您的父進程必須知道子進程的ID。 從那里,您可以使用FindWindowExEnumWindows檢索對話框句柄(通過指定適當的窗口類名稱),然后使用CloseWindow將其關閉。

注意:您必須使用P / Invoke才能使用這些功能。

也許不是最優雅的解決方案,但絕對可以。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM