Exe для запуска приложения

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

P1ece
Сообщения: 33
Зарегистрирован: 04 мар 2006, 05:35

04 июл 2006, 11:50

код с путем?
p:\p.bat - путь
тока сомневаюсь что лучше от этого станет
Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

04 июл 2006, 16:00

У меня так работает:

Код: Выделить всё

	WCHAR exepath[MAX_PATH];
	::GetSystemDirectoryW(exepath, MAX_PATH);
	::lstrcatW(exepath, L"\\cmd.exe");
	WCHAR cmdline[MAX_PATH];
	::lstrcpyW(cmdline, exepath);
	::lstrcatW(cmdline, L" /c p:\\p.bat");
	STARTUPINFOW si;
	memset(&si, 0, sizeof(si));
	PROCESS_INFORMATION pi;
	memset(&pi, 0, sizeof(pi));
	::CreateProcessW(exepath, cmdline, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
2B OR NOT(2B) = FF
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

04 июл 2006, 18:34

Absurd писал(а):У меня так работает:
Ну, у меня и вот так работает :) /Win98, Win2k/

Текст программы, запускающей указанный как параметр командной строки файл (компилировал на Microsoft VC++ 6.0):

Код: Выделить всё

#include "Windows.H"

int WINAPI WinMain &#40]
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

04 июл 2006, 21:05

P1ece, так бы сразу и написал: не могу программно запустить bat-файл. Тут на форуме телепаты не водятся :)
Собственно, за меня уже ответили, но повторение - мать учения :) Вот такой код должен работать:

Код: Выделить всё

ShellExecute(Handle, 0, "cmd.exe", "/c p:\\p.bat", 0, SW_SHOWNORMAL);
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

04 июл 2006, 21:11

Да, вот еще что: если путь содержит длинные имена, нужно его заключать в кавычки, чтобы командный процессор смог его коррктно обработать. Т.е. например для пути c:\Program Files\p.bat четвертый параметр в ShellExecute() будет выглядеть так:

Код: Выделить всё

"/c \"c:\\Program Files\\p.bat\""
P1ece
Сообщения: 33
Зарегистрирован: 04 мар 2006, 05:35

04 июл 2006, 23:04

Eugie писал(а):P1ece, так бы сразу и написал: не могу программно запустить bat-файл. Тут на форуме телепаты не водятся :)
Собственно, за меня уже ответили, но повторение - мать учения :) Вот такой код должен работать:

Код: Выделить всё

ShellExecute&#40][/quote]
дык а подрубать ничего кроме windows.h не надо?
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

05 июл 2006, 14:44

Включи еще Shellapi.h и в настройках проекта подключи библиотеку импорта Shell32.lib
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

05 июл 2006, 14:46

P1ece писал(а):дык а подрубать ничего кроме windows.h не надо?
А у тебя возникает ошибка компилятора? Или линкера?
Если ошибок компиляции/линковки нет, то встречный вопрос: зачем еще что-то "подрубать кроме windows.h"?
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

05 июл 2006, 15:00

ShellExecute() без Shellapi.h + Shell32.lib не скомпилируется и не слинкуется
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

06 июл 2006, 10:00

Eugie писал(а):ShellExecute() без Shellapi.h + Shell32.lib не скомпилируется и не слинкуется
Что касаемо исходного текста, то у меня компилируется (MS VC++ 6.0) без явного подключения Shellapi.h (см. исходник выше). Возможно, подключение Windows.H неявно подключает много всего, в т.ч. и Shellapi.h.
Посмотрел свойства проекта, Shell32.lib присутствует в списке (среди многого прочено), но, опять-таки, сам я вручную его туда не цеплял. Походу, при создании проекта VC сам прописывает туда весь набор стандартных lib-ов.
Ответить