Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
fantaz1
33 / 25 / 7
Регистрация: 08.11.2008
Сообщений: 107
#1

Запуск файла

13.03.2010, 19:36. Просмотров 3370. Ответов 18
Метки нет (Все метки)

Подскажите пожалуйста, как запустить .exe файл с консольного приложения?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2010, 19:36
Ответы с готовыми решениями:

запуск файла
народ написал вот такую прогу но незнаю как сделать чтоб открывал файл путь к...

c++, запуск файла
Интересует как в с++ запустить другой файл и передать ему управление? После...

Запуск исполняемого файла
Как запустить исполняемый exe файл с параметрами в командной строке чтобы...

Запуск внешнего файла
Добрый день, товарищи. Задача такая: на форме листбокс и кнопка, в листбоксе...

Запуск bat файла
Возможно ли написать программу которая запускает bat файл.

18
outoftime
║XLR8║
758 / 657 / 212
Регистрация: 25.07.2009
Сообщений: 3,297
Записей в блоге: 5
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 минуты
я так делал
1
CyBOSSeR
Эксперт С++
2309 / 1682 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
13.03.2010, 21:26 #3
fantaz1, если в Windows то можно с помощью ShellExecute.
1
outoftime
13.03.2010, 21:35
  #4

Не по теме:

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

0
CyBOSSeR
13.03.2010, 21:40
  #5

Не по теме:

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

Не по теме:

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

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

1
outoftime
13.03.2010, 22:02
  #6

Не по теме:

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

Не по теме:

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

Изврат

0
CyBOSSeR
13.03.2010, 22:15
  #7

Не по теме:

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

Не по теме:


Изврат

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

0
Day
1159 / 964 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
13.03.2010, 23:13 #8
Есть такое семейство функций spawn (и Си и Си++)
Самое простое
C
1
2
#include <process.h>
spawnl(P_WAIT, file.exe, NULL);
Это если ждать пока file.exe отработает
А чтоб не ждать - P_NOWAIT
2
kravam
быдлокодер
1709 / 896 / 105
Регистрация: 04.06.2008
Сообщений: 5,528
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- запускаемый файл. О путях к нему тс, надеюсь позаботится сам.
1
outoftime
║XLR8║
758 / 657 / 212
Регистрация: 25.07.2009
Сообщений: 3,297
Записей в блоге: 5
14.03.2010, 09:55 #10
Изврат в том, что консоль - это консоль, когда вы пишите под консоль нужно юзать консольные функции, к примеру, кто знает как вызвать другой *.ехе файл на выполнение на чистом си ??

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

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

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

Цитата Сообщение от outoftime Посмотреть сообщение
Или вы хотите сказать что функции WinApi быстрее?
Ну, как Вам сказать... На счёт исполнения не знаю, а компиляция быстрее. Ненамного, конечно, но быстрее.
0
Day
1159 / 964 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
14.03.2010, 10:48 #12
А на пост #8 никто внимания не обратил.
Уж что может проще и надежнее и универсальнее.
В nix-ах тоже прекрасно работает (оттуда и пошло)
А есть еще функция execl, только она убивает процесс, ее вызвавший
0
kravam
быдлокодер
1709 / 896 / 105
Регистрация: 04.06.2008
Сообщений: 5,528
14.03.2010, 10:58 #13
Ну тут даже и сказать нечего... Если я знаю две сущности, я на третью не обращу внимания, разве если меня убедят, что именно spawnl круто. (Хотя что там эдакого, ума не приложу. Создаёт процесс да создаёт себе. Не вникал особо) А вот тс пусть ознакамливается.
0
fantaz1
33 / 25 / 7
Регистрация: 08.11.2008
Сообщений: 107
14.03.2010, 19:27  [ТС] #14
Спасибо всем за ответы!) Использывал system("");
0
easybudda
Модератор
Эксперт CЭксперт С++
10054 / 5974 / 1493
Регистрация: 25.07.2009
Сообщений: 11,320
14.03.2010, 19:54 #15
Цитата Сообщение от Day Посмотреть сообщение
В nix-ах тоже прекрасно работает (оттуда и пошло)
При всём уважении - у меня ни в линуксе, ни во фре не то, чтоб этого самого spawnl(), и самого process.h нету! На работе ещё макось есть, но думаю - и там не найдётся. Сдаётся мне - это сугубо виндозная заморочка...
2
Day
1159 / 964 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
14.03.2010, 20:56 #16
easybudda, Виноват. с Unix-ом (по имени ИНМОС) работал в прошлом тысячелетии и вот - подзабыл!
Там действительно функция fork инкаких spawnl-execl нету.
0
easybudda
Модератор
Эксперт CЭксперт С++
10054 / 5974 / 1493
Регистрация: 25.07.2009
Сообщений: 11,320
14.03.2010, 21:22 #17
Day, ну fork() - это немного не то. Оно создаёт дочерний процесс - копию родительского... А вот execl(), execlp() и прочие фронтенды к execve(), как и она сама, присутствуют и живут в unistd.h
1
Lexa2414118
1 / 1 / 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" ведь кто знает что там у тебя
1
dimon1984
40 / 38 / 5
Регистрация: 22.01.2011
Сообщений: 670
20.05.2011, 19:53 #19
C++
1
WinExec("c:\\windows\\system32\\calc.exe",SW_SHOW);
0
20.05.2011, 19:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2011, 19:53

Запуск файла из переменной
Имеется переменная в которой хранится исполняемый файл Вопрос: как запустить...

Запуск файла из С++ программы
Добрый вечер, Разными способами пробовал запустить файлы, зная точно, где они...

Запуск файла BAT
Какой код bat писать чтобы батник запустил файл по ссылке c:\1.txt


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru