Форум программистов, компьютерный форум CyberForum.ru

Запуск ехе-файлла - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Pisarevsky
0 / 0 / 0
Регистрация: 19.12.2010
Сообщений: 38
23.01.2011, 12:10     Запуск ехе-файлла #1
Здравствуйте! Можно ли при нажатии кнопки на форме найти нужный ехе-файл и запустить его? Заранее большое спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2011, 12:10     Запуск ехе-файлла
Посмотрите здесь:

C++ Создание .ехе файла
создание .ехе файла C++
C++ Работа с файлами и запуск ехе из другой дерриктории.
C++ Сделать .ехе файл с С++
C++ Информация об авторе и программе в *.ехе
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
23.01.2011, 12:33     Запуск ехе-файлла #2
можно
maga2
0 / 0 / 0
Регистрация: 12.07.2010
Сообщений: 128
23.01.2011, 15:28     Запуск ехе-файлла #3
Запусать можно так:

PROCESS_INFORMATION pi;
STARTUPINFO si;
DWORD ExitCode;

memset(&si, 0, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOW;

CreateProcess('Путь к проге', 'Командная строка для проги', NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
// return GetLastError();
John Paramol
Сообщений: n/a
23.01.2011, 21:33     Запуск ехе-файлла #4
а можно так
Код
WinExec('командная строка',SW_SHOWDEFAULT);
maga2
0 / 0 / 0
Регистрация: 12.07.2010
Сообщений: 128
23.01.2011, 21:59     Запуск ехе-файлла #5
Конечно. Можно и ShellExecute.
Но CreateProcess дает больший контроль над запускаемым процессом,
т.к. сразу нам доступен его дескриптор.
Так, мы можем менять приоритет, приостанавливать и снова запускать,
ожидать завершения с приостановкой нашей программы и без, запускать
в 'спящем режиме' и т.д.
Pisarevsky
0 / 0 / 0
Регистрация: 19.12.2010
Сообщений: 38
25.01.2011, 11:04  [ТС]     Запуск ехе-файлла #6
Спасиюо большое.Ваши рекомендации мен очень омоогли. Но есть ещё небоольшй вопросик:

Приложение имеет также три РадиоКнопки: RadioButton1, RadioButton2 и RadioButton3 соответственно. Поле Edit1 содержит полный путь и исполняемый файл приложения (C:Мои документыC++Project1.exe). Кнопка Button1 запускает второй экземпляр моего приложения в зависимости от того, какая РадиоКнопка нажата (RadioButton1 – развернутое во весь экран, RadioButton2 –в виде пиктограммы). Мне нужно, чтобы при запуске второго экземпляра данного приложения его заголовок «Project1» менялся на заголовок «второй экземпляр». Ниже представлен код кнопки Button1:
int WINDOWVIEW; // Вид окна второго экземпляра приложения
if (RadioButton1->Checked)
WINDOWVIEW = SW_SHOWMAXIMIZED; // Во весь экран
else
WINDOWVIEW = SW_SHOWMINIMIZED; // в виде пиктограммы
WinExec(Edit1->Text.c_str(), WINDOWVIEW);
Application->Title= «Второй экземпляр»

Когда я выполняю щелчок мыши по кнопке Button1, сначала происходит смена заголовка на первом приложении, а затем открывается второе приложение, имеющее прежний заголовок «Project1». Если вам не сложно перешлите код на мой E-mail. Его адрес: staspisarevsky@rambler.ru. Заранее благодарю.
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
25.01.2011, 20:44     Запуск ехе-файлла #7
В этом месте Maga должен тебя убить )))
Читай его коментарии по поводу достоинств и недостатков методов.

Удачи, Владимир
maga2
0 / 0 / 0
Регистрация: 12.07.2010
Сообщений: 128
26.01.2011, 19:41     Запуск ехе-файлла #8
В том моем коде, перед CreateProcess надо поставить строку
si.lpTitle = 'Новый заголовок';

а в si.wShowWindow записывать нужную константу. Например:
si.wShowWindow = SW_SHOWMAXIMIZED;

Удачи!
Pisarevsky
0 / 0 / 0
Регистрация: 19.12.2010
Сообщений: 38
30.01.2011, 12:52  [ТС]     Запуск ехе-файлла #9
Еще раз огромное спасибо за помощь. И если вас не затруднит, еще один небольшой вопросик. Я неоднократно задавал его на форуме, но должного ответа так и не получил. А вопросик собственно такой: мое MDI-приложение имееет две формы (главная и доченрняя). Главная форма имеет пункт меню 'Окно' и команду 'Новое'. Моя цель - реализовать в моем приложении следующую возможность: при выборе меню 'Окно|Новое' должен запускаться второй экземпляр моего приложения и он же должен открывать его дочернюю форму (аналогично Microsoft Word или Excel). Заранее благодарю.
Pisarevsky
0 / 0 / 0
Регистрация: 19.12.2010
Сообщений: 38
30.01.2011, 12:52  [ТС]     Запуск ехе-файлла #10
Еще раз огромное спасибо за помощь. И если вас не затруднит, еще один небольшой вопросик. Я неоднократно задавал его на форуме, но должного ответа так и не получил. А вопросик собственно такой: мое MDI-приложение имееет две формы (главная и доченрняя). Главная форма имеет пункт меню 'Окно' и команду 'Новое'. Моя цель - реализовать в моем приложении следующую возможность: при выборе меню 'Окно|Новое' должен запускаться второй экземпляр моего приложения и он же должен открывать его дочернюю форму (аналогично Microsoft Word или Excel). Заранее благодарю.
Pisarevsky
0 / 0 / 0
Регистрация: 19.12.2010
Сообщений: 38
01.02.2011, 13:12  [ТС]     Запуск ехе-файлла #11
Maga: Я следовал вашему совету. Вот мой фрагмент кода:PROCESS_INFORMATION pi;
STARTUPINFO si;
DWORD ExitCode;

memset(&si, 0, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.lpTitle = 'Новый заголовок;
si.wShowWindow = SW_SHOWMAXIMIZED;
CreateProcess(NULL, Edit1->Text.c_str(), NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
// return GetLastError();
Pisarevsky
0 / 0 / 0
Регистрация: 19.12.2010
Сообщений: 38
01.02.2011, 13:16  [ТС]     Запуск ехе-файлла #12
Второй экземпляр приложения запускается, но его заголовок не меняется. Может я что-то упустил?
man_of_ring
4 / 4 / 0
Регистрация: 09.12.2010
Сообщений: 278
01.02.2011, 16:06     Запуск ехе-файлла #13
Здраствуйте !

Насчет твоего вопроса про 'второй экземпляр', есть 2 способа
1. 'ламерский' сории, но так, допустим ты запустил свою программу как определить не был ли запущен еще один экземпляр до этого ?
и тут же напрашиваеться ответ...ага у проги есть заголовок ну значит можно использовать FindWindow !
ну заполняют все параметры и вперед !
В приницпе работает...слов нету...но так поступают тока 'жокеи' (программеры решаюшие задачи сходу влоб).

2. нормальный (стандартный) Создют семафор через CreateMutex
и так далее.....смотри в МСДН.

3. через внешний источник - файл, запись в регистре.... скажем при запуске программа создает файл в системной директории, а при закрытии удаляет его, точно также с ключом в реестре...значение при работе например в 1, а при закрытии 0. Но это тоже не надежно, влруг принудительно зщакрыть программу ?


и так....самый рабочий это способ.

удачи.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2011, 16:31     Запуск ехе-файлла
Еще ссылки по теме:

C++ Запуск .ехе-шного файла
C++ Запуск .ехе файлов
C++ Закрывается ехе-файл

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
man_of_ring
4 / 4 / 0
Регистрация: 09.12.2010
Сообщений: 278
01.02.2011, 16:31     Запуск ехе-файлла #14
сории клаву заело.... сладкий кофе )))

2 способ самый надежный в нем сипользуються
CreateMutex

я так понял ты пишешь на Билдере ?
вот тебе исходник

извини писал с колена....

проверил работает...
bool Check(void)
{
HANDLE hm;
hm=OpenMutexA(MUTEX_ALL_ACCESS,false,'mutex');
if(hm!=0)
{
return true;
}
hm=CreateMutexA(NULL,false,'mutex');
return false;
}

void __fastcall TForm1::FormCreate(TObject *Sender)
{
if(Check()==true) Form1->Caption=Form1->Caption+' второй экземпляр';
}

вот тока вопрос как быть если запушен 3, 4 или N экземпляр ?

удачи
Yandex
Объявления
01.02.2011, 16:31     Запуск ехе-файлла
Ответ Создать тему
Опции темы

Текущее время: 11:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru