Показать полную графическую версию : [решено] Запуск бат файла
Alexander_88
11-07-2018, 00:09
Здравствуйте, есть такой бат файл:
if exist = "C:\settings and files\PC checked\1" start psexec \\192.168.56.1 -u Alexander -p 123456 -i "C:\settings and files\scripts\kill robot.exe"
Вручную запускается и работает, но через Delphi когда запускаю, пишет "Не удается найти Psexec, проверьте правильно ли указано имя и повторите попытку"
запускаю кнопкой button так:
windows.WinExec('C:\settings and files\scripts\For all users\update robot.bat',windows.SW_NORMAL);
Alexander_88, а где у Вас расположен psexec? А какой каталог является текущим для пакетного файла при его исполнении? Проверьте.
Alexander_88
11-07-2018, 01:05
psexec находится в windows/system32
прога на delphi из которой хочу запустить батник C:\settings and files\
сам батник C:\settings and files\scripts\For all users
Пробовал в батнике указать точный путь до psexec, но все равно не получается
if exist = "C:\settings and files\PC checked\1" start C:\Windows\System32\psexec \\192.168.56.1 -u Alexander -p 123456 -i "C:\settings and files\scripts\kill robot.exe"
пробовал такие варианты:
if exist = "C:\settings and files\PC checked\1" start "" C:\Windows\System32\psexec \\192.168.56.1 -u Alexander -p 123456 -i "C:\settings and files\scripts\kill robot.exe"
if exist = "C:\settings and files\PC checked\1" start C:\Windows\System32\psexec.exe \\192.168.56.1 -u Alexander -p 123456 -i "C:\settings and files\scripts\kill robot.exe"
Alexander_88, на всякий случай — какой разрядности у Вас ОС, и какой разрядности у Вас Delphi? И уберите уже, наконец, этот чёртов знак равенства :).
Alexander_88
11-07-2018, 01:31
равенства нету, я его со старого батника нечайно скопировал)
delphi 7 build 4.4.53.......... 32 битная.. я проект создаю с ОС х64 windows 10
а запускаю на windows server 2016 x64 бит
но вроде system32 папка на 32 и 64 разрядностях находятся по одному пути, или нет?
другие батники нормально запускаются и работают, только вот где psexec надо запустить, тот батник не хочет работать
может
windows.WinExec('C:\settings and files\scripts\For all users\update robot.bat',windows.SW_NORMAL);
не подходит для запуска?
но вроде system32 папка на 32 и 64 разрядностях находятся по одному пути, или нет? »
Понимаете, в чём дело… На x64 ОС наличествует два каталога System32 — один (System32) для x64-приложений, другой (SysWOW64) — для x86-приложений (это происходит из-за включённого редиректа файловых операций для x86-приложений). Когда x86-приложение обращается к каталогу System32 — его запросы по умолчанию перенаправляются в каталог SysWOW64, при этом само приложение продолжает считать, что оно работает именно с каталогом System32. WinExec() — это вообще устаревшая функция WinAPI из времён до-Windows 9.x/NT, оставленная только для совместимости с унаследованными приложениями.
Давайте предположим, что дело может быть в этом (я не проверял, у меня нет Delphi). Попробуйте либо положить psexec.exe в каталог SysWOW64, либо указать путь к x64'ному каталогу System32 в виде специального псевдонима SysNative вместо System32.
Вообще же касательно WinExec() — Блог GunSmoker-а: Почему вам (никогда) не следует использовать ShellExecute и WinExec (https://www.gunsmoker.ru/2015/01/never-use-ShellExecute.html).
Alexander_88
11-07-2018, 02:06
Вы были правы, скопировал файл psexec.exe в папку SysWOW64 и заработало :)
скопировал файл psexec.exe в папку SysWOW64 и заработало »Круто..... так можно всю папку скопировать!
"SysNative", в x64 - не настоящая папка, это проекция на 32-х или 64-х битную папку - в зависимости от вызывающего процесса.
Рекомендуемый механизм при доступе из 32-разрядного приложения в системные папки Windows x64, реализован самой ОС:
%systemroot%\sysnative\ - 64-разрядные библиотеки, по факту лежащие в %systemroot%\system32\
%systemroot%\system32\ - 32-разрядные библиотеки, по факту лежащие в %systemroot%\SysWOW64\
При разработке приложения, необходимо определить разрядность ОС и в зависимости от результата перенаправлять запросы или в "System32", или в "SysNative".
"System32", в x64 - не настоящая папка, … »
Каталог как раз-таки вполне себе настоящий.
Каталог как раз-таки вполне себе настоящий. »
... дайте воды попить, а то переночевать негде... Так и я, руки опередили мысль. В "уме" еще папка из сообщения "SysWOW64", а
пишу уже о "System32"Исправил!
opel431, ясно, бывает. Я сам такой ;).
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.