关于计算机安装 postgreSQL12.21.1 中 initdb.exe 启动报错 0xc0000022 的查错总结

问题描述

在安装 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 注册(因为直到问题解决后,我尝试重新安装pgsql复现问题时,DirectX Repair仍在提示我的C++库有问题),但不能确定放置在 SysWOW64 中的新 DLL 是否在注册后起到了作用。因此如果有人不幸遇到了类似问题,且注册 DLL 未解决时,可以考虑是否是这个变量影响了结果。以下是我下载的三个 DLL 。

如果有读者可以明确是哪种方式解决了这个问题,欢迎交流,余将不胜感激。
posted @ 2024-11-20 10:17  Ultraneuro  阅读(6)  评论(0编辑  收藏  举报