从 C:\Windows 和 C:\Windows\system32 运行程序的区别

从 C:\Windows 和 C:\Windows\system32 运行程序的区别

在 Windows 提示符下通过目录中的绝对路径调用程序C:\Windows是可行的,但从中调用该程序C:\Windows\System32会出现错误。

  • C:\Windows>D:\pathtoexe\program.exe--> 好的
  • C:\Windows\System32>D:\pathtoexe\myprogram.exe--> 未完成任务即终止

该程序从当前目录读取配置文件。配置文件存在于两个目录(Windows 和 System32)中。如果我从 Windows 目录中删除该文件,则从 Windows 目录调用该程序会终止并出现与从 System32 目录调用相同的错误。应该没有文件访问问题:

  • C:\Windows>type config.ini--> 好的
  • C:\Windows\system32>type config.ini--> 好的

Windows Server 2003 上具有相同配置文件的相同程序适用于这两个目录!

我该如何调试为什么它无法在 2008 上从 system32 运行?

答案1

我假设您使用的是 64 位操作系统,并且program.exe是一个 32 位程序。

如果是,则将配置文件放入windows\syswow64目录中。对于 32 位进程来说,这看起来是system32

由于 Windows 启动进程的方式,它们不会直接继承其工作目录,而是在启动期间执行相当于 的操作。因此,在 64 位系统目录中启动的 32 位进程实际上最终位于 32 位系统目录中(在 64 位 cmd 或 Explorer 中cd调用)。syswow64

答案2

由于需要当前目录中的某些文件(配置文件,可能是 dll 或第三方 exe),因此您的应用对运行的目录很敏感。我建议使用 pstools procmon 来确定正在访问的确切文件。

这也可能是 32 位与 64 位的问题。Procmon 也会显示这一点。

相关内容