Вызов программы в командной строке 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 работает для обоих каталогов!
Как мне отладить, почему он не запускается из system32 в 2008 году?
Я предполагаю, что у вас 64-битная ОС, и program.exe
это 32-битная программа.
Если это правда, поместите файл конфигурации в windows\syswow64
каталог. Это то, что представляется 32-битному процессу как system32
.
Из-за того, как Windows запускает процессы, они не наследуют напрямую свой рабочий каталог, а выполняют эквивалент cd
во время запуска. Следовательно, 32-битный процесс, запущенный в 64-битном системном каталоге, на самом деле заканчивается в 32-битном системном каталоге (называемом syswow64
в 64-битном cmd или проводнике).
Ваше приложение чувствительно к тому, в каком каталоге оно запущено, поскольку ожидает определенных файлов - файлов конфигурации, возможно, DLL или сторонних exes - из текущего каталога. Я бы посоветовал использовать pstools procmon для определения файлов .exact, к которым осуществляется доступ.
Это также может быть проблема 32 против 64 бит. Procmon также покажет это.