:: Visual Foxpro, Foxpro for DOS
Re: ошибка выполнения команды RUN
Sergio
Автор

Сообщений: 438
Откуда: Донецк
Дата регистрации: 16.06.2005
akvvohinc
Sergio
Я хочу запустить Run с этой переменной так, но у меня не работает:
Run(cmd /C ls_quser_server)

Но так почему-то не работает.
Подскажите, пожалуйста, как передать значение этой переменной в команду Run ?
Run cmd /C &ls_quser_server

Отлично, так работает!
Ещё немного дальше пойти -

Уважаемые, как Вы думаете, есть ли возможность результат выполнения команды
powershell "quser /server:STERMF030"
направить не в текстовый файл, а в переменную FoxPro, конкретно в мою ls_users?

Что-то типа такого:
ls_users= Run(cmd /C powershell "quser /server:STERMF030")
либо
Run(cmd /C powershell "quser /server:STERMF030" > ls_users)
Я понимаю, что написано неправильно, хочу просто логику показать того, что мне нужно .
Иначе мне приходится получать текстовый файл - как результат выполнения команды
Run(cmd /C powershell "quser /server:STERMF030" > C:\Temp\testquser.txt)
А потом его конвертировать в переменную -
ls_users=Filetostr("C:\Temp\testquser.txt")
Ratings: 0 negative/0 positive
Re: ошибка выполнения команды RUN
PaulWist

Сообщений: 14501
Дата регистрации: 01.04.2004
forum.foxclub.ru

forum.foxclub.ru


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)




Исправлено 1 раз(а). Последнее : PaulWist, 13.12.22 16:28
Ratings: 0 negative/0 positive
Re: ошибка выполнения команды RUN
akvvohinc

Сообщений: 4001
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Иначе мне приходится получать текстовый файл - как результат выполнения команды
Run(cmd /C powershell "quser /server:STERMF030" > C:\Temp\testquser.txt)

А потом его конвертировать в переменную -

ls_users=Filetostr("C:\Temp\testquser.txt")
Непонятно, в чем проблема.
Если просто неудобно каждый раз писать две строки вместо одной, то заверните эти строки в функцию (или класс) и пользуйтесь ей, "забыв", что там внутри.



Исправлено 1 раз(а). Последнее : akvvohinc, 13.12.22 16:50
Ratings: 0 negative/0 positive
Re: ошибка выполнения команды RUN
Sergio
Автор

Сообщений: 438
Откуда: Донецк
Дата регистрации: 16.06.2005

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

Проблема у меня заключается в том, что теперь всё вроде бы работает.

Связка команд
Run(cmd /C powershell "QUERY USER /server:STERMF030" > C:\Temp\testquser.txt)
и
ls_users=Filetostr("C:\Temp\testquser.txt")

отрабатывает теперь корректно.

Вопрос в том, что нужно опросить сорок серверов и перед пользователем будет выскакивать сорок чёрных окошек при выполнении команд RUN.

Ищу другой способ получить результат выполнения команд в powershell
"QUERY USER /server:STERMF030"
"QUERY USER /server:STERMF031"
"QUERY USER /server:STERMF032"
и т.д.
в переменную FoxPro.
Ratings: 0 negative/0 positive
Re: ошибка выполнения команды RUN
akvvohinc

Сообщений: 4001
Откуда: Москва
Дата регистрации: 11.11.2008
Sergio
Вопрос в том, что нужно опросить сорок серверов и перед пользователем будет выскакивать сорок чёрных окошек при выполнении команд RUN.
Вас никто не заставлял пользоваться именно командой RUN.
Пользуйтесь аналогией, которая здесь уже приводилась:
forum.foxclub.ru
никаких черных окошек там нет (во всяком случае, у меня).
Ratings: 0 negative/0 positive
Re: ошибка выполнения команды RUN
_vit

Сообщений: 5138
Дата регистрации: 29.07.2002
akvvohinc
_vit
Только не C:\WINDOWS\system32
Не спрашивай почему.
Раз спрашивать нельзя, то и ограничивать смысла не имеет, ведь работать будет и там.
Так что пусть это и нелогично, но ничто не мешает положить его и в C:\WINDOWS\system32.

Положить то ничего не мешает, тем более что он там и лежит после установки винды.
Только из фокса он оттуда запускаться не будет, даже если явно указать путь к нему в команде.
Это я и имел в виду.

Проверь сам. Если положить quser.exe в какую нибудь любую папку ну например в c:\temp\ то работает
если указать папку c:\windows\system32\ то нет. Несмотря на наличие этого файла там.

Run(cmd /C powershell "c:\temp\quser.exe" > C:\Temp\testquser.txt)
lcstr = FILETOSTR("C:\Temp\testquser.txt")
? lcstr
? "**********************************************"
Run(cmd /C powershell "c:\windows\system32\quser.exe" > C:\Temp\testquser.txt)
lcstr = FILETOSTR("C:\Temp\testquser.txt")
? lcstr

Как тут уже сказал Joys
Explorer - 64 битное приложение и запускает 64 битную версию Powershell.
Если путь к quser.exe не указан явно, то система ищет этот файл по списку путей указанном в переменной окружения и папке c:\windows\system32.
Если 32 битное приложение, коим является фокс, запускает Powershell, то запускается его 32 битная версия.
и система ведет поиск quser.exe по списку путей указанном в переменной окружения и папке c:\windows\SysWOW64 где находятся 32 битные dll и приложения.
Даже если в переменной окружения или явно в команде указать путь к папке c:\windows\system32 система все равно перенаправит поиск в c:\windows\SysWOW64.
А там такого файла нет, потому и возникает ошибка. Система просто не может найти этот файл.



Исправлено 1 раз(а). Последнее : _vit, 13.12.22 23:09
Ratings: 0 negative/1 positive
Re: ошибка выполнения команды RUN
of63

Сообщений: 24629
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
() ценное наблюдение... Вит!

() я не понял ни чего... )

> Даже если в переменной окружения или явно в команде указать путь к папке c:\windows\system32 система все равно перенаправит поиск в c:\windows\SysWOW64.
А там такого файла нет, потому и возникает ошибка. Система просто не может найти этот файл.

Аа...



Исправлено 2 раз(а). Последнее : of63, 13.12.22 23:29
Ratings: 0 negative/0 positive
Re: ошибка выполнения команды RUN
akvvohinc

Сообщений: 4001
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Положить то ничего не мешает, тем более что он там и лежит после установки винды.
Только из фокса он оттуда запускаться не будет, даже если явно указать путь к нему в команде.
Это я и имел в виду.
Ну, например, у меня (Win7) после установки винды там ничего не лежало (и сейчас не лежит), но 64-битная версия запускается.
А путь к quser.exe у меня другой - c:\Windows\WinSxS\amd64_microsoft-windows-t..commandlinetoolsmqq_... (далее набор цифр)
А поэтому мне ничто не мешало положить в System32 32-битную версию quser.exe.
И после этого она начинает вызываться "из-под Фокса" (до этого не вызывалась) даже без указания явного пути, так как путь к System32 входит в Path.
Да и даже если бы quser.exe уже был в System32, то 32-битную версию quser.exe можно положить туда под другим именем и обращаться к ней по нему - (работающий у меня пример я приводил выше!).

Цитата:
Проверь сам. Если положить quser.exe в какую нибудь любую папку ну например в c:\temp\ то работает
если указать папку c:\windows\system32\ то нет. Несмотря на наличие этого файла там.
Я это проверял ещё раньше:
forum.foxclub.ru
(там папка другая, но я проверял и для System32)

Но там я запускал через WScript.Shell, поэтому для чистоты эксперимента проверил сейчас твой пример - докладываю:

1) удалил из System32 файл quser.exe, который клал туда ранее - выдается ошибка, что командлет не найден.
2) забросил в System32 файл quser.exe - нормально работает.
3) убираю из команды путь "C:\Windows\System32" к файлу quser.exe - продолжает нормально работать.

Возможно, под Win7 всё несколько иначе, чем под Win10, но под Win10 (пока) не проверял.
Но скорее всего дело в том, что свою версию quser.exe я получил как обновление системы (раз она лежит у меня в WinSxS)



Исправлено 1 раз(а). Последнее : akvvohinc, 14.12.22 03:53
Ratings: 0 negative/0 positive
Re: ошибка выполнения команды RUN
Joys

Сообщений: 3483
Откуда: Старая Русса
Дата регистрации: 25.06.2000
Инфо
Папки System32 содержат 64-битные файлы DLL.
SysWOW64 содержит 32-разрядные файлы DLL, а 32-разрядные программы автоматически перенаправляются в эту папку
Sysnative — это папка перенаправления, которая позволяет 32-разрядным программам вызывать 64-разрядные библиотеки DLL.
Ratings: 0 negative/0 positive
Re: ошибка выполнения команды RUN
_vit

Сообщений: 5138
Дата регистрации: 29.07.2002
akvvohinc
Возможно, под Win7 всё несколько иначе, чем под Win10, но под Win10 (пока) не проверял.

Попробовал сейчас на работе на Win 7 X64 Enterprise.
Поведение в точности соответствует как и на Win 10.

Первый RUN срабатывает корректно
второй вываливается с ошибкой.
quser.exe изначально лежит в C:\Windows\System32

А у тебя точно Win 7 64 битная версия?
Ratings: 0 negative/0 positive
Re: ошибка выполнения команды RUN
Каратаев

Сообщений: 3931
Откуда: Алматы
Дата регистрации: 04.12.2001
Joys
Инфо
Папки System32 содержат 64-битные файлы DLL.
SysWOW64 содержит 32-разрядные файлы DLL, а 32-разрядные программы автоматически перенаправляются в эту папку
Sysnative — это папка перенаправления, которая позволяет 32-разрядным программам вызывать 64-разрядные библиотеки DLL.
А разве не наоборот?
SysWOW64 содержит 64-разрядные файлы DLL
System32 содержат 32-битные файлы DLL
Разве не так?


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive
Re: ошибка выполнения команды RUN
akvvohinc

Сообщений: 4001
Откуда: Москва
Дата регистрации: 11.11.2008
_vit
А у тебя точно Win 7 64 битная версия?
[attachment 36452 2022-12-14_144319.png]
Ratings: 0 negative/0 positive
Re: ошибка выполнения команды RUN
_vit

Сообщений: 5138
Дата регистрации: 29.07.2002
Каратаев
Joys
Инфо
Папки System32 содержат 64-битные файлы DLL.
SysWOW64 содержит 32-разрядные файлы DLL, а 32-разрядные программы автоматически перенаправляются в эту папку
Sysnative — это папка перенаправления, которая позволяет 32-разрядным программам вызывать 64-разрядные библиотеки DLL.
А разве не наоборот?
SysWOW64 содержит 64-разрядные файлы DLL
System32 содержат 32-битные файлы DLL
Разве не так?


Не так.

learn.microsoft.com
Ratings: 0 negative/0 positive
Re: ошибка выполнения команды RUN
akvvohinc

Сообщений: 4001
Откуда: Москва
Дата регистрации: 11.11.2008
Каратаев
Разве не так?
Не так - в 64-битных системах в System32 лежит всё 64-битное.
Название SysWOW64 "переводится" как Windows-on-Windows 64-bit, а в моей вольной интерпретации как "другой Windows в 64-битной Windows"



Исправлено 1 раз(а). Последнее : akvvohinc, 14.12.22 17:36
Ratings: 0 negative/0 positive
Re: ошибка выполнения команды RUN
_vit

Сообщений: 5138
Дата регистрации: 29.07.2002
akvvohinc
_vit
А у тебя точно Win 7 64 битная версия?
[attachment 36452 2022-12-14_144319.png]

Странно.
Ratings: 0 negative/0 positive
Re: ошибка выполнения команды RUN
akvvohinc

Сообщений: 4001
Откуда: Москва
Дата регистрации: 11.11.2008
Посмотрел на ноуте - там Win10 - quser.exe тоже отсутствует в System32, а лежит в одной из папок обновлений.
Оба компа загружал не сам, а знакомый системщик.

PS Да, и если бы семерка у меня была 32-битная, то папок Program Files(x86) и SysWOW64 просто не было бы.



Исправлено 1 раз(а). Последнее : akvvohinc, 14.12.22 17:39
Ratings: 0 negative/0 positive
Re: ошибка выполнения команды RUN
akvvohinc

Сообщений: 4001
Откуда: Москва
Дата регистрации: 11.11.2008
Непонятки с quser.exe, похоже, разрешились.

1) для работы 64-бит Powershell файл quser.exe не требуется! (я не нашел на диске ни одной копии файла, кроме 32-битной).
2) когда я клал 32-бит quser.exe в папку System32, он автоматически копировался в SysWOW64, при этом оставаясь и в System32.
(при удалении и переименовании, эти операции ожидаемо тоже проходили параллельно в обеих папках).

Проверь, действительно ли у тебя в System32 файл quser.exe является 64-битным, или это просто копия 32-битного файла, лежащего в SysWOW64.
Если же он 64-битный, то при его переименовании будет ли выполнять команду quser 64-битный PS?



Исправлено 5 раз(а). Последнее : akvvohinc, 14.12.22 18:47
Ratings: 0 negative/0 positive
Re: ошибка выполнения команды RUN
_vit

Сообщений: 5138
Дата регистрации: 29.07.2002
quser.exe у меня 64 битный и выполняется как на 32 так 64 бит PS.
В папке SysWOW64 его нет.
И мне попадалась инфа (за что купил за то продаю) что 32 битной версии quser.exe не существует.
Ratings: 0 negative/0 positive
Re: ошибка выполнения команды RUN
Каратаев

Сообщений: 3931
Откуда: Алматы
Дата регистрации: 04.12.2001
akvvohinc
Каратаев
Разве не так?
Не так - в 64-битных системах в System32 лежит всё 64-битное.
Название SysWOW64 "переводится" как Windows-on-Windows 64-bit, а в моей вольной интерпретации как "другой Windows в 64-битной Windows"
Вот же... Всегда считал наоборот. Век живи - век учись. Спасибо, буду знать...
Благо с такими непонятками не сталкивался...


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive
Re: ошибка выполнения команды RUN
akvvohinc

Сообщений: 4001
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
И мне попадалась инфа (за что купил за то продаю) что 32 битной версии quser.exe не существует.
Не может быть.
Я её получил именно так - задал в Гугле поиск 32-битной версии для Win7.
Мне выдалась страница, с которой я мог скачать оба варианта - я скачал 32-битную, положил её в System32 (она скопировалась и в SysWoW64), и только после этого 32-битный PS начал видеть командлет с этим именем.

Вот та страница:
www.pconlife.com

Цитата:
quser.exe у меня 64 битный и выполняется как на 32 так 64 бит PS.
В папке SysWOW64 его нет.
Когда с того же сайта я загрузил 64-битную версию для Win7 и бросил её в System32, то она тоже скопировалась в SysWoW64, но из-под 32-битного PS не работала:
Сбой выполнения программы quser.exe: Указанный исполняемый файл не является действительным приложением для этой операци
онной системы.строка:1 знак:1
+ quser



Исправлено 1 раз(а). Последнее : akvvohinc, 14.12.22 21:32
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 16 (Гостей: 16)

© 2000-2023 Fox Club 
Яндекс.Метрика