關計算機安裝 postgreSQL12.21.1 中 initdb.exe 啟動報錯 0xc0000022 的查錯總結

Ultraneuro發表於2024-11-20

問題描述

在安裝 postgreSQL12.21.1 時,initdb.exe 無法正常啟動,報錯資訊為應用程式無法啟動,錯誤程式碼 0xc0000022。

問題排查過程

  1. 初始排查與嘗試
    • 由於個人計算機存在早期許可權劃分遺留問題,此前多個程式(如 PS、Balatro、MySQL 等)出現類似報錯,通常以管理員身份開啟可解決,但此次 initdb.exe 無效。
  2. 第一次檢查
    • 檢查同時安裝的其他檔案,如 clusterdb.exe、createdb.exe 等,發現這些檔案在無管理員身份時出現 0xc0000022 報錯,以管理員身份開啟則無報錯。
    • 透過網路排查,找到相關部落格(https://blog.csdn.net/u011639103/article/details/128961263),雖不確定 “0xc 開頭為 C 語言錯誤” 的準確性,但推測問題屬於動態連結庫異常
  3. 第二次嘗試
    • 根據 copilot 建議,使用 Dependencies Walker 和 Depnedencies 確定 initdb.exe 在哪些 DLL 上有問題。
    • 掃描出部分異常 DLL,根據報錯下載放置在 “Windows\SysWOW64” 中,但未解決問題,且用這兩個軟體掃描已知正常的.exe 檔案也有類似錯誤提示。
  4. 第三次排查與解決
    • 在其他裝置正常安裝 pgsql 後,確定問題僅出在個人裝置上,從環境角度排查。
    • 下載 DirectX Repair 增強版修復 C++ 庫,過程包括兩步,因此無法確定是哪一步解決了問題:
      • 先刪除多次修復仍報錯的 VC redist 2015 - 2022 庫(x64 和 x86)並重啟,然後使用 DirectX Repair 下載較低版本的 2015 - 2022 庫。
      • 在 DirectX Repair 選項中註冊所有 DLL 並重啟。

問題解決結果

重啟後,initdb.exe 成功啟動。

總結與思考

0xc0000022 問題多數因動態連結庫異常導致,可能是 DLL 檔案許可權問題,使許可權低的軟體無法訪問,表現為部分程式以管理員身份執行可解決。
此次情況特殊,若讀者遇到管理員身份開啟仍無法解決的類似問題,希望本查錯過程能提供幫助。對於此次解決問題的具體有效步驟,更傾向於 DLL 註冊,但不能確定放置在 SysWOW64 中的新 DLL 是否在註冊後起到了作用。因此如果有人不幸遇到了類似問題,且註冊 DLL 未解決時,可以考慮是否是這個變數影響了結果。以下是我下載的三個 DLL 。

如果有讀者可以明確是哪種方式解決了這個問題,歡迎交流,餘將不勝感激。

相關文章