在安装 postgreSQL12.21.1 时,initdb.exe 无法正常启动,报错信息为应用程序无法启动,错误代码 0xc0000022。
在安装 postgreSQL12.21.1 时,initdb.exe 无法正常启动,报错信息为应用程序无法启动,错误代码 0xc0000022。
- 初始排查与尝试
- 由于个人计算机存在早期权限划分遗留问题,此前多个程序(如 PS、Balatro、MySQL 等)出现类似报错,通常以管理员身份打开可解决,但此次 initdb.exe 无效。
- 第一次检查
- 第二次尝试
- 根据 copilot 建议,使用 Dependencies Walker 和 Depnedencies 确定 initdb.exe 在哪些 DLL 上有问题。
- 扫描出部分异常 DLL,根据报错下载放置在 “Windows\SysWOW64” 中,但未解决问题,且用这两个软件扫描已知正常的.exe 文件也有类似错误提示。
- 第三次排查与解决
- 在其他设备正常安装 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 。
如果有读者可以明确是哪种方式解决了这个问题,欢迎交流,余将不胜感激。