在 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 也会显示这一点。