Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] Запуск бат файла

Ответить
Настройки темы
Delphi - [решено] Запуск бат файла

Ветеран


Сообщения: 531
Благодарности: 4

Профиль | Отправить PM | Цитировать


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

Код: Выделить весь код
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);

Отправлено: 00:09, 11-07-2018

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


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

Отправлено: 00:41, 11-07-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 531
Благодарности: 4

Профиль | Отправить PM | Цитировать


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"

Отправлено: 01:05, 11-07-2018 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


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

Отправлено: 01:21, 11-07-2018 | #4


Ветеран


Сообщения: 531
Благодарности: 4

Профиль | Отправить PM | Цитировать


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

Отправлено: 01:31, 11-07-2018 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата 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.
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:58, 11-07-2018 | #6


Ветеран


Сообщения: 531
Благодарности: 4

Профиль | Отправить PM | Цитировать


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

Отправлено: 02:06, 11-07-2018 | #7


Аватара для opel431

Ветеран


Contributor


Сообщения: 1803
Благодарности: 714

Профиль | Отправить PM | Цитировать


Цитата Alexander_88:
скопировал файл psexec.exe в папку SysWOW64 и заработало »
Круто..... так можно всю папку скопировать!

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

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

-------
Хвала тому, кто встав среди камней, уча другого, сам будет умней.


Последний раз редактировалось opel431, 11-07-2018 в 14:40.


Отправлено: 09:02, 11-07-2018 | #8


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата opel431:
"System32", в x64 - не настоящая папка, … »
Каталог как раз-таки вполне себе настоящий.

Отправлено: 12:20, 11-07-2018 | #9


Аватара для opel431

Ветеран


Contributor


Сообщения: 1803
Благодарности: 714

Профиль | Отправить PM | Цитировать


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

-------
Хвала тому, кто встав среди камней, уча другого, сам будет умней.


Отправлено: 14:39, 11-07-2018 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] Запуск бат файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - запуск бат файла с указанием месторасположения окна Тимур_Макенов@vk Скриптовые языки администрирования Windows 25 17-05-2019 16:23
Прочее - Запуск бат-файла на удаленном компьютере чере psexec.exe Genry Сетевые технологии 5 03-08-2015 09:02
PowerShell - [решено] Запуск бат файла на сервере через эл. письмо AZABAZA Скриптовые языки администрирования Windows 14 27-04-2015 14:25
CMD/BAT - Как из бат-файла проверить наличие файла по ссылке, не скачивая файл ? mitiya Скриптовые языки администрирования Windows 2 27-06-2008 20:50




 
Переход