Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Запуск бат файла (http://forum.oszone.net/showthread.php?t=335678)

Alexander_88 11-07-2018 00:09 2821402

Запуск бат файла
 
Здравствуйте, есть такой бат файл:

Код:

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);

Iska 11-07-2018 00:41 2821407

Alexander_88, а где у Вас расположен psexec? А какой каталог является текущим для пакетного файла при его исполнении? Проверьте.

Alexander_88 11-07-2018 01:05 2821410

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"

Iska 11-07-2018 01:21 2821412

Alexander_88, на всякий случай — какой разрядности у Вас ОС, и какой разрядности у Вас Delphi? И уберите уже, наконец, этот чёртов знак равенства :).

Alexander_88 11-07-2018 01:31 2821415

равенства нету, я его со старого батника нечайно скопировал)
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);
не подходит для запуска?

Iska 11-07-2018 01:58 2821419

Цитата:

Цитата Alexander_88
но вроде 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.

Alexander_88 11-07-2018 02:06 2821420

Вы были правы, скопировал файл psexec.exe в папку SysWOW64 и заработало :)

opel431 11-07-2018 09:02 2821439

Цитата:

Цитата Alexander_88
скопировал файл psexec.exe в папку SysWOW64 и заработало »

Круто..... так можно всю папку скопировать!

"SysNative", в x64 - не настоящая папка, это проекция на 32-х или 64-х битную папку - в зависимости от вызывающего процесса.
Рекомендуемый механизм при доступе из 32-разрядного приложения в системные папки Windows x64, реализован самой ОС:
%systemroot%\sysnative\ - 64-разрядные библиотеки, по факту лежащие в %systemroot%\system32\
%systemroot%\system32\ - 32-разрядные библиотеки, по факту лежащие в %systemroot%\SysWOW64\

При разработке приложения, необходимо определить разрядность ОС и в зависимости от результата перенаправлять запросы или в "System32", или в "SysNative".

Iska 11-07-2018 12:20 2821480

Цитата:

Цитата opel431
"System32", в x64 - не настоящая папка, … »

Каталог как раз-таки вполне себе настоящий.

opel431 11-07-2018 14:39 2821518

Цитата:

Цитата Iska
Каталог как раз-таки вполне себе настоящий. »

... дайте воды попить, а то переночевать негде... Так и я, руки опередили мысль. В "уме" еще папка из сообщения "SysWOW64", а
пишу уже о "System32"
Исправил!

Iska 11-07-2018 14:47 2821520

opel431, ясно, бывает. Я сам такой ;).


Время: 10:27.

Время: 10:27.
© OSzone.net 2001-