Запуск 64 разрядных приложений из клариона

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5109
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 11 раз
Поблагодарили: 55 раз

Запуск 64 разрядных приложений из клариона

Сообщение finsoftrz »

Сейчас некоторые утилиты доступны только в 64 разрядном исполнении. Чтобы запустить их из кларионовского приложения, надо использовать функцию win api Wow64DisableWow64FsRedirection. Запускать можно через run или shellexec. Если кому надо, позже могу выложить в составе класса.
Прототип функции.

Код: Выделить всё

     MODULE('kernel32.dll') 
     fsWAE_Wow64DisableWow64FsRedirection(*ULONG),BOOL,PASCAL,RAW,DLL(_Wow64DisableWow64FsRedirection_),name('Wow64DisableWow64FsRedirection')   
     END
Вызов примерно так.

Код: Выделить всё

RunApp64 PROCEDURE (STRING pName)
loc:var   ulong
      CODE   

       if fsWAE_Wow64DisableWow64FsRedirection(loc:var)=1
          run(pName)  
       .     
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7891
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 89 раз

Запуск 64 разрядных приложений из клариона

Сообщение Игорь Столяров »

finsoftrz писал(а): 13 Апрель 2025, 14:45 Если кому надо
Пардон, но это не запуск, переназначение рабочего каталога System32 ...
Давно с этим не работал, но там кажется ещё нужно потом обратно переключать сразу после запуска, иначе всё рухнет ...
Посмотрите пожалуйста лучше сами в WinAPI ! :D
Make Clarion Great Again ! 😎
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5109
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 11 раз
Поблагодарили: 55 раз

Запуск 64 разрядных приложений из клариона

Сообщение finsoftrz »

Запускаются именно 64 разрядные версии утилит. Я экспериментировал с quser. Если запустить что-то типа run('cmd.exe /c quser > 1.txt'), то будет ошибка, что такая команда не существует, так как quser для 32 разрядов нет, а вызывается 32 разрядная версия cmd из wow64. Если аналогично запустить после вызова Wow64DisableWow64FsRedirection, то информация появляется, так как вызывается 64 битная версия cmd из system32.
Если просто будете пытаться запустить 64 разрядную утилиту из 32 разрядного приложения, то она будет выполняться по умолчанию в wow64, что приводит к аварийному завершению.
Надо ли переключаться обратно, в примере использования не было. Я так понял, что в данном случае не требуется. Проблем не заметил, все работает штатно после данного вызова.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7891
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 89 раз

Запуск 64 разрядных приложений из клариона

Сообщение Игорь Столяров »

finsoftrz писал(а): 13 Апрель 2025, 17:02 то информация появляется, так как вызывается 64 битная версия cmd из system32
Ни в коем случае не ставлю под сомнение пройденный путь ... но не проще ли для вызова одиночной утилиты
QUSER.EXE получить штатными средствами путь к папке SYSTEM32 и просто вызвать её по полному имени ?
(я не пробовал)

Переназначение системной папки это мощный экскаватор, им можно разнести детскую песочницу вместо вскапывания ... 🤷‍♂️
Make Clarion Great Again ! 😎
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5109
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 11 раз
Поблагодарили: 55 раз

Запуск 64 разрядных приложений из клариона

Сообщение finsoftrz »

Игорь, я же написал, если вызывать 64 битные утилиты из 32 битных приложений, то они по умолчанию будут запускаться в wow64, что завершится аварийным выходом. То есть, wow64 это виртуальная машина для 32 битных приложений, а Вы предлагаете запускать на ней 64 битные.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7891
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 89 раз

Запуск 64 разрядных приложений из клариона

Сообщение Игорь Столяров »

finsoftrz писал(а): 13 Апрель 2025, 18:09 а Вы предлагаете запускать на ней 64 битные.
Спасибо. Я понял. 🤦‍♀️
Make Clarion Great Again ! 😎
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5109
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 11 раз
Поблагодарили: 55 раз

Запуск 64 разрядных приложений из клариона

Сообщение finsoftrz »

Это довольно важный ресурс. Например, не так давно работали с честным знаком, где требуется интерфейс для доступа к сертификатам. Я вначале не мог понять, делаю на vbscript, тестирую через запуск в проводнике, все работает, вызываю из своего приложения, не работает. Выход тогда нашли, установив старую библиотеку для win32, которая хоть и не поддерживается давно MS, но работает. Причина таже самая, из кларионовского приложения запускалась 32 разрядная версия vbscript, которая не работала с актуальной win64 библиотекой.
А через этот механизм мы можем взаимодействовать с 64 битными утилитами и скриптовыми движками, а дальше по цепочке. Обмен через файлы, старый и надежный способ.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5109
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 11 раз
Поблагодарили: 55 раз

Запуск 64 разрядных приложений из клариона

Сообщение finsoftrz »

Уточнил, переключаться назад надо с помощью функции Wow64RevertWow64FsRedirection с аналогичным прототипом. В качестве параметра передавать ссылку на ту же ulong переменную, которую указывали при вызове Wow64DisableWow64FsRedirection. Все вызовы run/shellexec между этими переключателями запускают нативные win64 приложения.

Точнее сказать, если запускать 32 битные приложения после Wow64DisableWow64FsRedirection, то они запускаются. А 64 битные приложения без предварительного Wow64DisableWow64FsRedirection нет.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7891
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 89 раз

Запуск 64 разрядных приложений из клариона

Сообщение Игорь Столяров »

finsoftrz писал(а): 14 Апрель 2025, 8:06 переключаться назад надо
Да, что-то вроде того ... Я уже и не помню где мы с этим работали.
Кажется, нужно нужно "переходить" в SYSTEM32 x64 для запуска экранной клавиатуры.
Make Clarion Great Again ! 😎
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5109
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 11 раз
Поблагодарили: 55 раз

Запуск 64 разрядных приложений из клариона

Сообщение finsoftrz »

Есть еще функция GetNativeSystemInfo, через которую проще всего определить, что работаем под 64 битной ОС (правда, в msdn описание принимающей структуры, похоже, устарело).
То есть мы можем взаимодействовать с 64 битными или 32 битными скриптовыми движками (vbscript, pyton и т.п.), убрав это все внутрь класса. Соответственно, через 64 битный скриптовый движек получаем доступ к 64 битным ресурсам ОС и сторонним библиотекам.
C6/C11, ШВС, tps/btrieve.
Ответить