从C:\ Windows与C:\ Windows \ system32运行程序的差异

C:\Windows目录中的绝对path调用Windows提示程序正在工作,但从C:\Windows\System32调用该程序给我错误。

  • C:\Windows>D:\pathtoexe\program.exe – >确定
  • C:\Windows\System32>D:\pathtoexe\myprogram.exe – >终止而不执行任务

程序从当前目录读取一个configuration文件。 configuration文件存在于(Windows和System32)目录中。 如果我从Windows目录中删除该文件,则从Windows目录中调用该程序将终止,如同从System32目录调用它一样。 应该没有文件访问问题:

  • C:\Windows>type config.ini – >确定
  • C:\Windows\system32>type config.ini – >确定

Windows Server 2003上具有相同configuration文件的相同程序正在为这两个目录工作!

如何debugging为什么它不会从2008年的system32运行?

我假设你是在一个64位的操作系统, program.exe是一个32位的程序。

如果是这样的话,把configuration文件放到windows\syswow64目录下。 这是一个32位进程看起来像system32

由于Windows启动进程的方式,它们不直接inheritance其工作目录,而是在启动过程中执行相当于cd 。 因此,在64位系统目录中启动的32位进程实际上结束于32位系统目录(在64位cmd或资源pipe理器中称为syswow64 )。

由于预期某些文件(configuration文件,可能是dll或第三方exes)来自当前目录,因此您的应用程序对运行它的目录敏感。 我会build议使用pstools procmon来确定被访问的.exact文件。

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