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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.94
fantaz1
 Аватар для fantaz1
33 / 25 / 1
Регистрация: 08.11.2008
Сообщений: 107
13.03.2010, 19:36     Запуск файла #1
Подскажите пожалуйста, как запустить .exe файл с консольного приложения?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2010, 19:36     Запуск файла
Посмотрите здесь:

запуск файла C++
C++ Запуск bat файла
c++, запуск файла C++
C++ Запуск внешнего файла
C++ Запуск файла через cmd
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
13.03.2010, 21:08     Запуск файла #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "my.hpp"
 
using namespace std;
 
inline bool check(int &a) { return (a > 0 && a < 4); }
 
int main()
{
    int key;
    do 
    {
        system("cls");        
        cout <<    "Виберiть дiю:\n\n"
                    "1 - переведення чисел з однiєї системи числення в iншу;\n\n"
                    "2 - переведення суми, рiзницi, добутку та цiлої частини вiд дiлення двох чисел в прямий, обернений та доповняльний коди;\n\n"
                    "3 - вийти.\n";
        while ( !check(key = getch()-'0') ) { cin.clear(); cout << "\nПомилка введення\tспробуйте ще раз: "; }
        if (key == 1){system("cls"); system("a_in_b.exe");}
        if (key == 2){system("cls"); system("bynary.exe");}
        if (key == 3){system("cls"); cout << "завершення.."; Sleep(tSleep);}
    }
    while (key != 3);    
}
Добавлено через 2 минуты
я так делал
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
13.03.2010, 21:26     Запуск файла #3
fantaz1, если в Windows то можно с помощью ShellExecute.
outoftime
13.03.2010, 21:35
  #4

Не по теме:

CyBOSSeR, так ведь с консольного приложения..

CyBOSSeR
13.03.2010, 21:40
  #5

Не по теме:

Цитата Сообщение от outoftime Посмотреть сообщение

Не по теме:

CyBOSSeR, так ведь с консольного приложения..

А что тебе мешает вызывать Win32 API функции из консольного приложения?

outoftime
13.03.2010, 22:02
  #6

Не по теме:

Цитата Сообщение от CyBOSSeR Посмотреть сообщение

Не по теме:

А что тебе мешает вызывать Win32 API функции из консольного приложения?

Изврат

CyBOSSeR
13.03.2010, 22:15
  #7

Не по теме:

Цитата Сообщение от outoftime Посмотреть сообщение

Не по теме:


Изврат

Как мне тогда, например, удалить/скопировать/переместить файл? Или создавать/управлять потоками?
Никакого изврата в использовании Win32 API функций в консольных приложений нет. Есть задачи решить которые без них не удастся вообще.

Day
 Аватар для Day
1149 / 954 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
13.03.2010, 23:13     Запуск файла #8
Есть такое семейство функций spawn (и Си и Си++)
Самое простое
C
1
2
#include <process.h>
spawnl(P_WAIT, file.exe, NULL);
Это если ждать пока file.exe отработает
А чтоб не ждать - P_NOWAIT
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
14.03.2010, 07:32     Запуск файла #9
Хе...
Считаю system ("fail.exe"), реализованного outoftime, хорошим вариантом.

...А вот, ктати, вариант с использованием API-функций из консольного приложения. Что тут извратного- ума не приложу

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <windows.h>
 
int main() {
 STARTUPINFO si;
 PROCESS_INFORMATION pi;
 ZeroMemory(&si,sizeof(STARTUPINFO) );
 
 if (CreateProcess ("messagebox.exe", 0, 0, 0, 0, 0, 0, 0, &si, &pi)) { 
 
 //Почему необходимо закрывать описатель потока- смотри у Джефри Рихтера в главе четвёртой, где-то в конце
  CloseHandle( pi.hThread );
 }
 else {
  printf ("protsessne sozdan");
 }
 return 0;
}
messagebox.exe- запускаемый файл. О путях к нему тс, надеюсь позаботится сам.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
14.03.2010, 09:55     Запуск файла #10
Изврат в том, что консоль - это консоль, когда вы пишите под консоль нужно юзать консольные функции, к примеру, кто знает как вызвать другой *.ехе файл на выполнение на чистом си ??

А ведь это как-то раньше делали и без WinApi.. Или вы хотите сказать что функции WinApi быстрее? Лично я так не думаю, просто мне кажется что знать как это делалось раньше - нужно. Потому как создается эффект будто мы с вами тупее тех кто сидел за клавой в то время когда си был на пике популярности..
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
14.03.2010, 10:37     Запуск файла #11
Цитата Сообщение от outoftime Посмотреть сообщение
Изврат в том, что консоль - это консоль, когда вы пишите под консоль нужно юзать консольные функции
Ну, если Вы говорите, что когда мы пишем под консоль, нужно юзать консольные функции, остаётся только развести руками. Остаётся верить, что тс всё же найдёт время и ознакомится со способом, предложенном мной. Добавлю лишь, что CreateProcess все эти 10 параметров зачем-то принимает и каждый что-то да значит. Не просто так.

Что касаемо
Цитата Сообщение от outoftime Посмотреть сообщение
кто знает как вызвать другой *.ехе файл на выполнение на чистом си ??
я бы просто обратился к его отцам основателям и прочёл в главе 7.8.4 "функция system (char*) выполняеткоманду, содержащуюся в символьной строке s? а затем... далее по тексту."

То есть ответ на Ваш вопрос уже дан Вами. Хотя, допускаю, что существует какое-то ДРУГОЕ стандартное решение (в смысле прописанное в стандарте)

Цитата Сообщение от outoftime Посмотреть сообщение
Или вы хотите сказать что функции WinApi быстрее?
Ну, как Вам сказать... На счёт исполнения не знаю, а компиляция быстрее. Ненамного, конечно, но быстрее.
Day
 Аватар для Day
1149 / 954 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
14.03.2010, 10:48     Запуск файла #12
А на пост #8 никто внимания не обратил.
Уж что может проще и надежнее и универсальнее.
В nix-ах тоже прекрасно работает (оттуда и пошло)
А есть еще функция execl, только она убивает процесс, ее вызвавший
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
14.03.2010, 10:58     Запуск файла #13
Ну тут даже и сказать нечего... Если я знаю две сущности, я на третью не обращу внимания, разве если меня убедят, что именно spawnl круто. (Хотя что там эдакого, ума не приложу. Создаёт процесс да создаёт себе. Не вникал особо) А вот тс пусть ознакамливается.
fantaz1
 Аватар для fantaz1
33 / 25 / 1
Регистрация: 08.11.2008
Сообщений: 107
14.03.2010, 19:27  [ТС]     Запуск файла #14
Спасибо всем за ответы!) Использывал system("");
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
14.03.2010, 19:54     Запуск файла #15
Цитата Сообщение от Day Посмотреть сообщение
В nix-ах тоже прекрасно работает (оттуда и пошло)
При всём уважении - у меня ни в линуксе, ни во фре не то, чтоб этого самого spawnl(), и самого process.h нету! На работе ещё макось есть, но думаю - и там не найдётся. Сдаётся мне - это сугубо виндозная заморочка...
Day
 Аватар для Day
1149 / 954 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
14.03.2010, 20:56     Запуск файла #16
easybudda, Виноват. с Unix-ом (по имени ИНМОС) работал в прошлом тысячелетии и вот - подзабыл!
Там действительно функция fork инкаких spawnl-execl нету.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
14.03.2010, 21:22     Запуск файла #17
Day, ну fork() - это немного не то. Оно создаёт дочерний процесс - копию родительского... А вот execl(), execlp() и прочие фронтенды к execve(), как и она сама, присутствуют и живут в unistd.h
Lexa2414118
0 / 0 / 0
Регистрация: 30.04.2009
Сообщений: 12
20.05.2011, 19:12     Запуск файла #18
Цитата Сообщение от outoftime Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "my.hpp"
 
using namespace std;
 
inline bool check(int &a) { return (a > 0 && a < 4); }
 
int main()
{
    int key;
    do 
    {
        system("cls");        
        cout <<    "Виберiть дiю:\n\n"
                    "1 - переведення чисел з однiєї системи числення в iншу;\n\n"
                    "2 - переведення суми, рiзницi, добутку та цiлої частини вiд дiлення двох чисел в прямий, обернений та доповняльний коди;\n\n"
                    "3 - вийти.\n";
        while ( !check(key = getch()-'0') ) { cin.clear(); cout << "\nПомилка введення\tспробуйте ще раз: "; }
        if (key == 1){system("cls"); system("a_in_b.exe");}
        if (key == 2){system("cls"); system("bynary.exe");}
        if (key == 3){system("cls"); cout << "завершення.."; Sleep(tSleep);}
    }
    while (key != 3);    
}
Добавлено через 2 минуты
я так делал
зачем кидать код...без "my.hpp" ведь кто знает что там у тебя
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2011, 19:53     Запуск файла
Еще ссылки по теме:

Запуск .bat файла из программы C++
WinExec, запуск batch файла C++
C++ Запуск файла BAT

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

Или воспользуйтесь поиском по форуму:
dimon1984
40 / 38 / 0
Регистрация: 22.01.2011
Сообщений: 670
20.05.2011, 19:53     Запуск файла #19
C++
1
WinExec("c:\\windows\\system32\\calc.exe",SW_SHOW);
Yandex
Объявления
20.05.2011, 19:53     Запуск файла
Ответ Создать тему
Опции темы

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