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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2011, 20:58   #1
Nokse
 
Регистрация: 13.02.2011
Сообщений: 5
По умолчанию Вопрос по функции system()

Пишу программку, которая будет работать с базой данных MySQL, предварительно настроив и запустив сам сервер мускуля. Чтобы проще запускать и останавливать сервер мускуля, решил установить его, как службу. Но выполнение сгенерированной команды посредством функции system() результатов не дало. Проверял команду, вписав ее в батник и выполнив его - все работает, служба устанавливается. Посему вопрос: как сделать так, чтобы окно консоли, которое на мгновение появляется, не закрывалось?

Вот то, что я накодил:
Код:
String Path,
         InstallCommand,
         DoubleQuotes = "\"";
char *InstallCommandChar;
Path = ExtractFilePath(ParamStr(0)) ; // узнаем путь до каталога с exe-шником нашей программы
InstallCommand = DoubleQuotes + Path + "database\\bin\\mysqld-nt.exe" + DoubleQuotes + " --install \"mysql\" --defaults-file=" + DoubleQuotes + Path +
"database\\my.ini" + DoubleQuotes + "\r pause()"; // собираем строку вида "C:\database\bin\mysqld-nt.exe" --install "mysql" --defaults-file="C:\database\my.ini"
InstallCommandChar = InstallCommand.c_str();// преобразовываем string в char
system(InstallCommandChar);// выполняем команду
Nokse вне форума Ответить с цитированием
Старый 15.11.2011, 07:55   #2
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от Nokse Посмотреть сообщение
Посему вопрос: как сделать так, чтобы окно консоли, которое на мгновение появляется, не закрывалось?
Открыть консоль и в ней запустить вашу программу.
Либо, раз все равно уже используете system():
Код:
system("pause");
Но первый вариант предпочтительнее


Кстати, кто будет память выделять под InstallCommandChar?
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария

Последний раз редактировалось Blade; 15.11.2011 в 07:58.
Blade вне форума Ответить с цитированием
Старый 16.11.2011, 00:38   #3
Nokse
 
Регистрация: 13.02.2011
Сообщений: 5
По умолчанию

Blade, спасибо конечно за советы, но ни первый, ни второй не помогут, так как мне надо программно установить MySQL в качестве службы виндовс. Делается это с помощью команды типа "C:\database\bin\mysqld-nt.exe" --install "mysql" --defaults-file="C:\database\my.ini" выполненной в консоли (другого способа установить службу я не знаю). Поэтому я и пытался вызвать функцию system(), передав ей в качестве параметра сформированную таким заковыристым образом команду. Но окно консоли очень быстро мелькает, при этом служба не устанавливается. Если следом вызвать system("pause"), то окно консоли останется висеть, но это будет уже другое окно консоли. А я хотел бы увидеть, что пишет консоль при выполнении команды установки службы (а она пишет в чем проблема, если допущена ошибка)

Ну а память под InstallCommandChar, если я правильно понимаю, я уже выделил командой
Код:
char *InstallCommandChar;
Прошу сильно не бить, если где ошибся, я только учусь (причем самостоятельно)...
Nokse вне форума Ответить с цитированием
Старый 16.11.2011, 10:53   #4
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Код:
"C:\database\bin\mysqld-nt.exe" --install "mysql" --defaults-file="C:\database\my.ini" & pause
Somebody вне форума Ответить с цитированием
Старый 16.11.2011, 22:53   #5
Nokse
 
Регистрация: 13.02.2011
Сообщений: 5
По умолчанию

Somebody, спасибо, это именно то, что надо Теперь я знаю, почему оно не работает, так как задумывалось.
в консоли висит надпись:
Цитата:
"E:\test\Filter" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
Для продолжения нажмите любую клавишу . . .
при том, что оригинальная команда выглядит вот так:
Код:
"E:\test\Filter synth\database\bin\mysqld-nt.exe" --install "mysql" --defaults-file="E:\test\Filter synth\database\my.ini" & pause
Мне непонятно, почему консоль не видит ничего после пробела, хотя путь заключен в кавычки... Есть идеи у кого-нибудь?
Nokse вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как через функции system() поменять цвет фона??? yura_zb Общие вопросы C/C++ 2 03.05.2011 13:58
Как подключить System.Math (математические функции) в MS Visual C# Express Edition vedro-compota Общие вопросы .NET 5 25.01.2011 09:08
Вопрос по функции Seferus Помощь студентам 0 05.10.2010 20:29
Си. Вопрос по функции forsaken66 Помощь студентам 6 06.10.2009 23:53
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33