Найти в Дзене

Чудеса: Windows firewall и перенаправления файловой системы, SysWOW64 и System32

Динозавр столкнулся со странной проблемой. После "непонятно чего" перестал работать доисторический скрипт командного файла (*.cmd) для подключения к ftp серверу и выкладыванию на ftp файла. Код в скрипте для подключения к ftp серверу: c:\windows\system32\ftp.exe -s:d:\cmd\sent_2_ftp.txt в файле sent_2_ftp.txt: open ftp.serv.er <login> <password> prompt binary quote pasv mput d:\cmd\files\file??????.rar close bye Ошибка при выполнении mput: "425 Unable to build data connection: Connection timed out". На лицо были проблемы с настройками windows firewall. Динозавр проверил настройки windows firewall (брандмауэр) и добавил правило: Обратите внимание на путь до программы. Он совпадает с тем, который указан в файле древнего скрипта (c:\windows\system32\ftp.exe). Ошибка осталась. Тогда в параметрах Брандмауэра Динозавр включил уведомления. "Уведомлять, когда брандмауэр Windows блокирует новую программу". И о чудо, оказывается блокируется ftp.exe, но по другому пути: C:\Windows\SysWOW64\ftp

Динозавр столкнулся со странной проблемой. После "непонятно чего" перестал работать доисторический скрипт командного файла (*.cmd) для подключения к ftp серверу и выкладыванию на ftp файла. Код в скрипте для подключения к ftp серверу: c:\windows\system32\ftp.exe -s:d:\cmd\sent_2_ftp.txt

в файле sent_2_ftp.txt:
open ftp.serv.er
<login>
<password>
prompt
binary
quote pasv
mput d:\cmd\files\file??????.rar
close
bye

Ошибка при выполнении mput:

"425 Unable to build data connection: Connection timed out".

На лицо были проблемы с настройками windows firewall.

Динозавр проверил настройки windows firewall (брандмауэр) и добавил правило:

Правило Windows Брандмауэр для ftp.exe
Правило Windows Брандмауэр для ftp.exe

Обратите внимание на путь до программы. Он совпадает с тем, который указан в файле древнего скрипта (c:\windows\system32\ftp.exe).

Ошибка осталась.

Тогда в параметрах Брандмауэра Динозавр включил уведомления. "Уведомлять, когда брандмауэр Windows блокирует новую программу".

Уведомления брандмауэр Windows
Уведомления брандмауэр Windows

И о чудо, оказывается блокируется ftp.exe, но по другому пути: C:\Windows\SysWOW64\ftp.exe

И в диспетчере задач тоже видно, что фактически запущен процесс C:\Windows\SysWOW64\ftp.exe.

Диспетчер задач с запущенным ftp.exe
Диспетчер задач с запущенным ftp.exe

То есть при запуске c:\windows\system32\ftp.exe фактически запускается C:\Windows\SysWOW64\ftp.exe.

Это происходит из-за особенностей работы файловой системы и механизмов перенаправления в 64-разрядных версиях Windows.

Причины такого поведения Windows:

Разделение на 32-битные и 64-битные приложения:
В 64-разрядных версиях Windows существуют две отдельные папки для системных файлов: System32 и SysWOW64.
System32 содержит 64-битные версии системных утилит и библиотек.
SysWOW64 (Windows on Windows 64) содержит 32-битные версии системных утилит и библиотек для совместимости с 32-битными приложениями.

Перенаправление файловой системы:
Когда 32-битное приложение пытается получить доступ к C:\Windows\System32, Windows автоматически перенаправляет его в C:\Windows\SysWOW64. Это сделано для того, чтобы 32-битные приложения могли работать с 32-битными версиями системных файлов.
Если вы запускаете ftp.exe из 32-битного приложения или командной строки, которая работает в 32-битном режиме, система перенаправляет запрос в SysWOW64.

Как избежать перенаправления:
Если нужно запустить именно 64-битную версию ftp.exe, используете 64-битную командную строку: C:\Windows\System32\cmd.exe

Век живи, век учись...