当 .exe 文件夹中的 DLL 存在时,应用程序启动;如果 System32 中的 DLL 存在,则会弹出错误(错误 0xc0000428““要么不是设计用于在 Windows 上运行...”)

当 .exe 文件夹中的 DLL 存在时,应用程序启动;如果 System32 中的 DLL 存在,则会弹出错误(错误 0xc0000428““要么不是设计用于在 Windows 上运行...”)

我们有一个应用程序(测试工具),如果我运行 exe 并将 DLL 放在同一个库中,它就可以正常工作。如果我将 DLL 移动到 c:\windows\system32 并尝试运行 exe,它会失败并显示以下消息。Windows 8.1 平板电脑。

有什么线索可以知道发生了什么吗?还尝试签署 DLL,但没有成功。

“不是设计用于在 Windows 上运行,或者包含错误。请尝试安装......错误状态 0xc0000428”

答案1

不管是哪种 .exe,显然都需要在与 .dll 相同的目录中运行。如果在同一工作目录之外,可执行文件将无法找到 .dll,而 .dll 是应用程序正确运行所必需的资源。除非您是(或认识)设计该应用程序的程序员,否则如果不在同一目录中,则不太可能有让可执行文件找到此 .dll 的选项。您可以考虑为 .exe 创建快捷方式,并将 .exe+.dll 配对放在另一个目录中。

答案2

系统上可能有两个版本的 DLL(具有相同的名称),一个与您的系统兼容,另一个不兼容。

当 EXE 文件夹中有“正确的” DLL 时,它会首先检查该位置,然后找到正确的 DLL 并使用它。

如果您将此工作 DLL 移至 System32,它将位于 PATH 中,但现在它在搜索顺序列表中的位置更靠后。具体位置取决于您的 PATH。

如果 DLL 的非工作版本在搜索顺序中排在您移动到 ​​System32 的版本之前,那么程序将尝试使用该版本(因为它首先找到该版本)。

在系统中的所有文件夹中搜索该 DLL 的其他版本,并在可能的情况下将其(重新)移动,以将其从 DLL 路径搜索顺序中移除。

答案3

这是一个签名问题。一旦我们启用了审核模式,一切就都好了(不再有错误消息)。我们会找出哪一方需要签署哪个组件,但至少我们知道该去哪里找。

感谢所有参与了的人。

相关内容