Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2012, 18:03   #1
crymchanin
Пользователь
 
Аватар для crymchanin
 
Регистрация: 01.02.2012
Сообщений: 84
Восклицание Работа с cmd

Пытаюсь установить директорию в командной строке, но выходит ошибка - директория устанавливается не та. Вот кусок кода:

Код:
char cDir[_MAX_PATH];
char run[_MAX_PATH];
 
    GetModuleFileName(NULL, cDir, _MAX_PATH);     /* -- C:\Users\Tolik\Documents\Visual Studio 2010\Projects\DDS_NVidia_Utils\DDS_NVidia_Utils\Debug\*/
    PathRemoveFileSpec(cDir);                     /* -- C:\Users\Tolik\Documents\Visual Studio 2010\Projects\DDS_NVidia_Utils\DDS_NVidia_Utils\Debug\DDS_NVidia_Utils.exe*/
    PathCombine(cDir, cDir, "bin");               /* -- C:\Users\Tolik\Documents\Visual Studio 2010\Projects\DDS_NVidia_Utils\DDS_NVidia_Utils\Debug\bin*/
    sprintf(run, "cmd.exe cd %s", cDir);          /* -- cmd.exe cd C:\Users\Tolik\Documents\Visual Studio 2010\Projects\DDS_NVidia_Utils\DDS_NVidia_Utils\Debug\bin*/
    system(run);
crymchanin вне форума Ответить с цитированием
Старый 09.06.2012, 18:24   #2
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Попробуйте занести имя директории в кавычки.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 09.06.2012, 19:05   #3
crymchanin
Пользователь
 
Аватар для crymchanin
 
Регистрация: 01.02.2012
Сообщений: 84
По умолчанию

Цитата:
Сообщение от Granus
Попробуйте занести имя директории в кавычки.
Не помогло

Код:
system("cmd.exe ch \"D:\\bin\"");
Думал что дело в пробелах в пути, сделал уже так (сама программа в D:\) , и все равно в bin не заходит.
crymchanin вне форума Ответить с цитированием
Старый 09.06.2012, 19:09   #4
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

А Вы уверены, что если передавать аргументы cmd при запуске, он их обработает как будто они были введены во время работы?
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 09.06.2012, 19:22   #5
crymchanin
Пользователь
 
Аватар для crymchanin
 
Регистрация: 01.02.2012
Сообщений: 84
По умолчанию

Хм.. возможно. Попробую сделать иначе..

Что-то у меня не совсем выходит.. Подскажите пожалуйста в каком направлении работать - CreateProcess или это можно все-таки сделать при помощи system (запустить cmd и потом посылать ему команды)?

Последний раз редактировалось Stilet; 09.06.2012 в 21:28.
crymchanin вне форума Ответить с цитированием
Старый 09.06.2012, 21:39   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Пытаюсь установить директорию в командной строке
А в целом задача какая? SetCurrentDirectory не подходит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.06.2012, 21:58   #7
crymchanin
Пользователь
 
Аватар для crymchanin
 
Регистрация: 01.02.2012
Сообщений: 84
По умолчанию

Цитата:
Сообщение от Stilet
А в целом задача какая? SetCurrentDirectory не подходит?
Да тут такая тема... Пытаюсь вызвать программу readdxt.exe из NVidia Utils, она вызывается так: readdxt.exe my_dds (my_dds - Direct Draw Surface текстура, расширение указывать не нужно). Вызывать ее нужно из директории где находится экзешник. Через CreateProcess не выходит, system тоже, в командной строке - вручную, смог запустить как нужно (прописав cd). Вот и решил пытаться запустить ее через cmd

Казалось-бы CreateProcess решает все проблемы, но вот не хочет работать код.

Код:
STARTUPINFO sInf;
	PROCESS_INFORMATION pInf;

	char mDir[_MAX_PATH];
	char cmd[200];
	char cDir[_MAX_PATH];
	char run[_MAX_PATH];
	
	memset(&sInf, 0, sizeof(STARTUPINFO));
	GetModuleFileName(NULL, cDir, _MAX_PATH);
	PathRemoveFileSpec(cDir);
	PathCombine(cDir, cDir, "bin");
	PathCombine(mDir, cDir, "readdxt.exe");
	GetDlgItemText(IDC_EDIT1, cmd, _MAX_PATH);
	PathRemoveExtension(cmd);
	sprintf(run, "%s %s", mDir, cmd);

	if(!CreateProcess(NULL, run, NULL, NULL, FALSE, NULL, NULL, cDir, &sInf, &pInf))
	{
	  MessageBox("Ошибка при выполнении readdxt.exe", "Error", MB_ICONEXCLAMATION | MB_OK);
	  return;
	}

Последний раз редактировалось crymchanin; 09.06.2012 в 22:00.
crymchanin вне форума Ответить с цитированием
Старый 09.06.2012, 22:34   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так а какая ошибка?
Почему GetLastError не анализируешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.06.2012, 22:43   #9
crymchanin
Пользователь
 
Аватар для crymchanin
 
Регистрация: 01.02.2012
Сообщений: 84
По умолчанию

Цитата:
Сообщение от Stilet
Так а какая ошибка?
Почему GetLastError не анализируешь?
Ну как мне кажется, тут нужно не определять GetLastError , а получить стд вывод из процесса (консольное приложение). А вот как это сделать я не знаю
crymchanin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CMD Makaralex Общие вопросы Delphi 1 19.04.2012 20:56
cmd Adilhan Помощь студентам 8 09.04.2012 00:17
cmd sir.andrey Помощь студентам 3 20.06.2010 11:51
cmd cold11 Помощь студентам 0 13.03.2010 18:23
Функция ShellExecute, работа с CMD Droid Общие вопросы Delphi 6 18.07.2009 00:21