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