Помощь - Поиск - Пользователи - Календарь
Полная версия: Проблема с WinExec.
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Unconnected
Привет всем.

Весь день бьюсь с WinExec. Допустим, код winexec('cmd /C ret.bat',SW_HIDE); батник открывает. А вот winexec(pchar('cmd /C '+path+'ret.bat'),SW_HIDE); нифига не открывает! Хотя, по логике вещей просто обязан. В path ТОЧНО лежит правильный путь. Может, с типами проблема, подскажите..

Да-да, я знаю, что WinExec устарел, и что можно обойтись без cmd /C вовсе. Мне нужно так.

Добавлено через 4 мин.
Чёрт возьми. Ужасно извиняюсь. Как обычно бывает, после создания темы на решение проблемы, над которой думал полдня, уходит минута. Для пути нужны были кавычки (что логично, в нём есть пробелы).

winexec(pchar('cmd /C "'+path+'ret.bat"'),SW_HIDE);

Можно удалить в принципе..
volvo
А ведь MSDN явно говорит:
Цитата
WinExec Function
Runs the specified application.

Note This function is provided only for compatibility with 16-bit Windows. Applications should use the CreateProcess function.


Цитата
Мне нужно так.
Это ты потом Майкрософту будешь говорить, что тебе ТАК нужно, когда в 64-битной версии Windows у тебя твой код вылетит с ошибкой (ибо там нет этого камня - обратной совместимости с 16-битными ОС)? Или что?
Unconnected
Почему камня?) Вообще, надо наверное на ShellExecute переделать (так же можно?).. Мне просто надо как бы от имени cmd запустить.
volvo
Цитата
Почему камня?
Потому что тянет назад и не дает двигаться вперед.

Цитата
надо наверное на ShellExecute переделать (так же можно?)
"Можно и зайца научить курить" (С) "Служебный роман".

В смысле, функция ShellExecute() может, конечно, запускать на выполнение какую-то программу, но предназначена она не для этого, а для того, чтобы для заданного типа файлов выполнить определенное действие. Вот если у тебя задача - открыть HTML-файл браузером по умолчанию, то это как раз задача, которая решается через ShellExecute, а не ползанием по реестру и вычислением, какой там браузер установлен дефолтным, а потом - запуском его с твоим файлом.

А если тебе надо запустить батник - то твой случай описан прямо в справке по CreateProcess:

Цитата
lpApplicationName [in, optional]

The name of the module to be executed. This module can be a Windows-based application. It can be some other type of module (for example, MS-DOS or OS/2) if the appropriate subsystem is available on the local computer.

<...>

To run a batch file, you must start the command interpreter; set lpApplicationName to cmd.exe and set lpCommandLine to the following arguments: /c plus the name of the batch file.

(CreateProcess Function)
Unconnected
Ну, в ShellExecute тоже можно указывать нужные параметры. Я с ней и сделал, в CreateProcess миллион входных параметров, долго разбираться..

shellexecute(form1.handle,'open','cmd.exe',pchar('/C "'+path+'ret.bat"'),nil,SW_HIDE);
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.