Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

%PROCESSOR_ARCHITECTURE% #61

Closed
pavelmxx opened this issue Mar 1, 2018 · 17 comments
Closed

%PROCESSOR_ARCHITECTURE% #61

pavelmxx opened this issue Mar 1, 2018 · 17 comments
Labels

Comments

@pavelmxx
Copy link

pavelmxx commented Mar 1, 2018

При попытках запуска из total commander наборов cmd файлов, таких как "1_russia_blacklist.cmd", отвечает "error opening filter: the system cannot find the file specified", что обусловлено неверным выбором разрядности приложения. При одном только запуске goodbyedpi.exe из total commander напрямую, все cmd файлы потом начинают нормально работать до первой перезагрузки компьютера и дальнейшего запуска cmd.
Выяснилось, что среда интерпретатора cmd может быть 32 и 64 разрядная, и далеко не во всех случаях на 64 битных системах запускается 64 битный интерпретатор. total commander инициирует 32 разрядную при запуске cmd файла. По крайней мере, в моей версии так, и кто его знает при каких обстоятельствах и способов запуска (планировщик, вызов из другого пакетного файла или приложения) оно задетектит не так, как надо, снова. Пробовал на двух машинах Windows 7 64. Проверяется проверкой сред так:

c:\set
…
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_ARCHITEW6432=AMD64 
…

Для cmd, запущенного из total commander

c:\set
…
PROCESSOR_ARCHITECTURE=AMD64
…

Для "Пуск>выполнить>cmd"

Гуглится по "PROCESSOR_ARCHITEW6432". https://blogs.msdn.microsoft.com/david.wang/2006/03/27/howto-detect-process-bitness/ . Тут говорят про правильную логику определения архитектуры.

Я бы предложил такую логику по варианту "OR":

…
PUSHD "%~dp0"
IF "%PROCESSOR_ARCHITECTURE%"=="AMD64" (PUSHD "x86_64")
IF "%PROCESSOR_ARCHITEW6432%"=="AMD64" (PUSHD "x86_64") ELSE (PUSHD "x86")
…

На правильность исполнения не претендую. Даже не уверен, что это точно правильная логика реализации OR в пакетных файлах. Но у меня работает, протестировал с подстановкой других переменных и их значений вручную.

@r4sas
Copy link
Contributor

r4sas commented Mar 1, 2018

if defined PROCESSOR_ARCHITEW6432 (PUSHD "x86_64")
else if "%PROCESSOR_ARCHITECTURE%"=="AMD64" (PUSHD "x86_64")
else (PUSHD "x86")

В PROCESSOR_ARCHITEW6432 может быть не только AMD64, а например IA64.

@ValdikSS
Copy link
Owner

Видимо, 32-битный Total Commander запускает 32-битный интерпретатор. Исправлю в следующем релизе.

@ValdikSS ValdikSS added the bug label Mar 25, 2018
@Catty82
Copy link

Catty82 commented Apr 27, 2018

Подтверждаю. Тоже столкнулся с этим. У меня из-за некоторых плагинов запускается в меркантильных целях 32-битный Тотал на х64 системе. Правда, ФАР х64 и в нем все ок с запуском этих батников. :)

@tarelka95
Copy link

Ребят, это не баг, а адекватная работа подсистемы WOW64. Сделана для работы 32bit приложений в 64bit системе. Реализуется с помощью библиотеки Wow64win.dll. IA64 в режиме WOW64 происходит ресурсоемкая эмуляция x86 инструкций, а значит %PROCESSOR_ARCHITECTURE% выводит верную инфу.

@unkn0000wn
Copy link

tarelka95 тем не менее служба по запуску service_install_russia_blacklist.cmd не работает. пришлось заменить файлы в x86 из x86_64 и все заработало. так что может быть WOW64 определяет правильно но программа обращается в папку x86 для запуска из службы а система x64

@tarelka95
Copy link

tarelka95 commented Jun 22, 2018

unkn0000wn хотите сказать, что x86 не умеет запускаться как сервис в системе x86_64? Серьезно?
WOW64 должен брать файлы из папки x86, это основная суть работы этой подсистемы.

Ну что же, протестировал (специально скачал total commander x86 для принуждения запуска в WOW64), вот результаты:
default
Как видим, сервис имеет тип 32 битной программы на x86_64 системе (This is Windows 8 x64). А так же, то что он без проблем подгружен в систему.
default
Этот скриншот работающего сервиса в "Диспетчере задач", как видим он тоже 32-битный и вполне работающий.
Ну и последний штрих:
default

@AlexeyRich
Copy link

AlexeyRich commented Jun 22, 2018

"unkn0000wn хотите сказать, что x86 не умеет запускаться как сервис в системе x86_64? Серьезно?"
Хочу сказать что умеет или должен уметь, но запускается и не работает. потому что выдает вот что:
""
image

В то время как x86_64 выдает все в порядке:
image

Весь сыр бор в том что при запуске service_install_russia_blacklist.cmd сервис не запускается (с ошибкой) и ничего не работает. Но стоит подменить в папке x86 файлы, файлами из папки x86_64 и все запускается и работает. ( Беру тупа переименовываю X86 в x86.bak, потом переименовываю x86_64 в x86 )
запускаю service_install_russia_blacklist.cmd и вуаля, все пашет. вот о чем я веду речь если меня до сих пор не поняли. Файлы архитектуры то разные и чудно, но x86 оригинальные не работают WOW64
"WOW64 должен брать файлы из папки x86, это основная суть работы этой подсистемы." - он их берет но они не работают. ( Error opening filter: The system cannot find the file specified. )

image

@ValdikSS
Copy link
Owner

Запускайте из 64-битного приложения.

@tarelka95
Copy link

Вот как не пытаюсь проблему воспроизвести, не получается у меня сообщения "error opening filter: the system cannot find the file specified", все нормально грузит =)
И GoodbyeDPI v0.1.5rc1 пробовал, и GoodbyeDPI v0.1.4; и с черным списком и без; и как обычную программу, и как сервис; да даже пробовал от разных версий "blacklist.txt". Все естественно в Total Commander 32-bit(для WOW64).
Может проблема специфична только для win 7 x64? В моей системе(win 8 x64) проблема не воспроизводится.

@AlexeyRich
Copy link

AlexeyRich commented Jun 22, 2018

"Запускайте из 64-битного приложения."
хм. Действительно запустил из под Windows и все встало на свои места x86_64 и работает. Благодарю за ликбез. Не думал, что x86 приложение TotanlCMD (PowerUser v69) повлияет на определение архитектуры при запуске? Но напрямую из под Винды действительно определяет x86_64 и работает, а если запускаю из под TotalCMD (PowerUser) определяет x86 и естественно не работает ( Error opening filter: The system cannot find the file specified. )
image
кстати подправил 0_russia_update_blacklist_file

@ECHO` OFF
PUSHD "%~dp0"
wget -O blacklist.txt https://api.antizapret.info/group.php?data=domain
POPD
```
Так качает быстрее и надежнее.. Но это на вкус кому как удобнее.

@ValdikSS
Copy link
Owner

wget отсутствует в стандартной поставке, он устанавливается либо вместе с cygwin, либо вместе с Linux subsystem.

@AlexeyRich
Copy link

AlexeyRich commented Jun 22, 2018

"wget отсутствует в стандартной поставке, он устанавливается либо вместе с cygwin, либо вместе с Linux subsystem."
ничто не мешает его (wget.exe) добавить в дистрибутив релиза.
методом bitsadmin либо выдает ошибку
image
либо если работает, то качает крайне медленно по скорости

@tarelka95
Copy link

offtop: По поводу быстрее и надежнее, лучше бы воспользовались cURL.
offtop(2): По поводу улучшений, тоже делал улучшения на установку сервиса.

  • Проверка прав админа;
  • Проверка на архитектуру Itanium;
  • Ну и убраны некоторые излишества.
    Но нужно учитывать, что папка "x86_64" теперь называется "AMD64".
    Еще есть хотелка: чтобы в ресурсах файла goodbyedpi.exe появилась запись о версии программы.
@echo off
net session >nul 2>&1
if "%PROCESSOR_ARCHITECTURE%" EQU "IA64" (
    echo Not supported Intel Itanium architecture.
    echo Press any key to quit . . .
    pause >nul
) else (
    if %ERRORLEVEL% EQU 0 (
        sc stop "GoodbyeDPI"
        sc delete "GoodbyeDPI"
        sc create "GoodbyeDPI" binPath= "%~dp0%PROCESSOR_ARCHITECTURE%\goodbyedpi.exe -p --blacklist \"%~dp0blacklist.txt\"" start= "auto"
        sc description "GoodbyeDPI" "Passive Deep Packet Inspection blocker and Active DPI circumvention utility"
        sc start "GoodbyeDPI"
        echo Press any key to quit . . .
        pause >nul
    ) else (
        echo This script should be run with administrator privileges.
        echo Right click -^> Run as administrator
        echo Press any key to quit . . .
        pause >nul
    )
)

@AlexeyRich
Copy link

AlexeyRich commented Jun 22, 2018

Немного не понял, этот код батника для будущего релиза?
в 0.1.5rc1 этого кода нет.
Однозначно, улучшения и проверки на установку сервиса - нужны.

@tarelka95
Copy link

AlexeyRich, если ValdikSS позаимствует для будущего реализа, то да.
Вы заморочились с 0_russia_update_blacklist_file, а я с батником установки сервиса.
Вот место публикации не совсем верное, надеюсь ValdikSS не обидется.

@AlexeyRich
Copy link

AlexeyRich commented Jun 22, 2018

" надеюсь ValdikSS не обидется."
я тоже надеюсь. Хочется просто, чтобы работало как часы при нажатии одной кнопки при установки сервиса, а еще лучше какой нибудь cron на ежедневное-еженедельное обновление blacklist на автомате