Назад | Перейти на главную страницу

Отличия запуска программы из C: \ Windows от C: \ Windows \ system32

Вызов программы в командной строке Windows по абсолютному пути от C:\Windows каталог работает, но вызывает эту программу из C:\Windows\System32 дает мне ошибки.

Программа читает файл конфигурации из текущего каталога. Файл конфигурации существует в обоих каталогах (Windows и System32). Если я удалю файл из каталога Windows, тогда вызов программы из каталога Windows завершится с той же ошибкой, как если бы я вызываю ее из каталога System32. Проблем с доступом к файлам быть не должно:

Одна и та же программа с одинаковым файлом конфигурации в 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 также покажет это.