Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.51/47: Рейтинг темы: голосов - 47, средняя оценка - 4.51
0 / 0 / 0
Регистрация: 04.04.2016
Сообщений: 7

Запуск стороннего exe файла

04.04.2016, 19:45. Показов 11117. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Она должна, всего на всего, открывать .exe файл на компьютере в отдельном окне. Заранее спасибос!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.04.2016, 19:45
Ответы с готовыми решениями:

Запуск стороннего cpp или exe файла
Добрый день! Возникла такая необходимость: Есть лабораторная работа (решение ОДУ методом коллокаций) в виде С++ программы (.cpp класса + .h...

Упаковка/распаковка стороннего файла в exe
Добрый день, товарищи и коллеги. Благодаря руководству столкнулся со следующей задачей : Необходимо написать программу, которая...

Скрытый запуск exe файла
Мне нужно запустить exe так, чтобы окно не появилось, но программа работала (как бы в фоне). Создал Win32 приложение (пустое). Делал...

35
 Аватар для Recrut_rf
389 / 334 / 66
Регистрация: 14.10.2014
Сообщений: 1,474
20.02.2021, 13:01
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от hoggy Посмотреть сообщение
Shared memory то здесь причем
чтобы читать данные из файла
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
20.02.2021, 13:06
Цитата Сообщение от Renji Посмотреть сообщение
"Запускаемая программа для своей работы должна брать входные данные из файла, лежащего в одной папке с ней"
У вас это называется не "обмен данными", а как-то иначе?
конечно иначе.
здесь вообще никаким обменом даже близко не пахнет.
это так и назвается "подгрузить файл"

ты ещё внимательнее прочти фразу:
Цитата Сообщение от Renji Посмотреть сообщение
"Запускаемая программа для своей работы должна брать входные данные из файла, лежащего в одной папке с ней"

если ты вдруг не понял, вот тебе реальный пример из жизни:

консольная утилита findCopyPaste.exe занимается поиском копипасты в каталогах.
при запуске, утилита подгружает конфигурацию из файла findCopyPaste.json,
который расположен в том же каталоге, где находится её бинарь.

здесь нет никакого обмена.
улита никакими данными ни с кем не обменивается.
она просто подгружает свою конфигурацию.

Цитата Сообщение от Renji Посмотреть сообщение
Одна программа генерирует входные данные, другая обрабатывает.
я тебя в третий раз спрашиваю:
Цитата Сообщение от hoggy Посмотреть сообщение
ты этот "обмен данными" сам додумал?
0
 Аватар для Recrut_rf
389 / 334 / 66
Регистрация: 14.10.2014
Сообщений: 1,474
20.02.2021, 13:08
чтение данных из файла, который отображен в память другим процессом:

Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <windows.h>
#include <fstream>
 
int main()
{
  int  a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  char  file_name[] = "C:\\Demo.bin";
  char  mapping_name[] = "MappingName";
  HANDLE  hFile, hMapping;   // дескрипторы файла и объекта отображения
  int  *ptr;                 // для указателя на массив
 
  // открываем файл для вывода
  ofstream  out(file_name, ios::out | ios::binary);
  if (!out)
  {
    cerr << "File constructor failed." << endl;
    return 0;
  }
  // выводим исходный массив в файл и на консоль
  cout << "Initial array: ";
  for (int i = 0; i < 10; ++i)
  {
    out.write((char*)&a[i], sizeof(int));
    cout << a[i] << ' ';
  }
  cout << endl;
  // закрываем выходной файл
  out.close();
//----------------------------------------------------------------------
  // открываем файл для отображения в память
  hFile = CreateFile(file_name, GENERIC_READ | GENERIC_WRITE,
    FILE_SHARE_READ | FILE_SHARE_WRITE,
    NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  if (hFile == INVALID_HANDLE_VALUE)
  {
    cerr << "Create file failed." << endl;
    return GetLastError();
  }
  // открываем объект, отображающий файл в память
  hMapping = CreateFileMapping(
        hFile,           // дескриптор открытого файла
        NULL,            // атрибуты защиты по умолчанию
        PAGE_READWRITE,  // режим доступа
        0, 0,      // размер объекта отображения равен размеру файла
        mapping_name);   // имя объекта отображения
  if (!hMapping)
  {
    cerr << "Create file mapping failed." << endl;
    return GetLastError();
  }
  // создаем вид файла
  ptr = (int*)MapViewOfFile(
      hMapping,        // дескриптор объекта отображения
      FILE_MAP_WRITE,  // режим доступа к виду
      0, 0,            // отображаем файл с начала
      0);              // отображаем весь файл
  // изменяем значения элементов массива
  for (i = 0; i < 10; ++i)
    ptr[i] += 10;
  // сбрасываем весь вид на диск
  if (!FlushViewOfFile(ptr, 0))
  {
    cerr << "Flush view of file failed." << endl;
    return GetLastError();
  }
//----------------------------------------------------------------------
// создаем процесс, который будет читать данные из отображаемого 
// в память файла
  char lpszAppName[] = "C:\\ConsoleProcess.exe";
 
  STARTUPINFO si;
  PROCESS_INFORMATION piApp;
 
  ZeroMemory(&si, sizeof(STARTUPINFO));
  si.cb = sizeof(STARTUPINFO);
 
  // создаем новый консольный процесс
  if (!CreateProcess(lpszAppName, NULL, NULL, NULL, FALSE,
      CREATE_NEW_CONSOLE, NULL, NULL, &si, &piApp))
  {
    cerr << "Create process failed." << endl;
    return GetLastError();
  }
  // ждем завершения созданного прцесса
  WaitForSingleObject(piApp.hProcess, INFINITE);
  // закрываем дескрипторы этого процесса в текущем процессе
  CloseHandle(piApp.hThread);
  CloseHandle(piApp.hProcess);
//----------------------------------------------------------------------
// отменяем отображение файла в память
  if (!UnmapViewOfFile(ptr))
  {
    cerr << "Unmap view of file failed." << endl;
    return GetLastError();
  }
  // закрываем объкт отображения файла в память
  if (!CloseHandle(hMapping))
  {
    cerr << "Close file failed." << endl;
    return GetLastError();
  }
  // закрываем файл
  if (!CloseHandle(hFile))
  {
    cerr << "Close file failed." << endl;
    return GetLastError();
  }
  // ждем команду на завершение процесса
  char  c;
  cout << "Input any char to exit: ";
  cin >> c;
 
  return 0;
}
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
20.02.2021, 13:10
Цитата Сообщение от hoggy Посмотреть сообщение
консольная утилита findCopyPaste.exe занимается поиском копипасты в каталогах.
при запуске, утилита подгружает конфигурацию из файла findCopyPaste.json,
который расположен в том же каталоге, где находится её бинарь.
Ок, возможно речь шла о файле конфигурации и это я чего-то про обмен недопонял. Хотя, лично мне это видится маловероятным.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
20.02.2021, 13:11
Цитата Сообщение от Recrut_rf Посмотреть сообщение
чтобы читать данные из файла
Shared memory используется в ситуациях, когда необходимо шарить память.
для того что бы просто читать данные из файла, она не нужна.
0
 Аватар для Recrut_rf
389 / 334 / 66
Регистрация: 14.10.2014
Сообщений: 1,474
20.02.2021, 13:19
Цитата Сообщение от hoggy Посмотреть сообщение
для того что бы просто читать данные из файла
Это да, я знаю. Просто я думал, что ТС'у возможно нужно передавать/принимать данные через отображаемый в память файл. Хотя нет блин, это я уже сам додумал, ему просто нужно

Цитата Сообщение от archerix Посмотреть сообщение
она должна брать входные данные и записывать выходные в свою папку.
а это наверное проще сделать указав нужный путь до папки и всё....
0
2 / 2 / 1
Регистрация: 08.02.2020
Сообщений: 215
20.02.2021, 15:40
Давайте я по порядку изложу, в чем суть этой возни

Мне надо делать расчеты. Для этого используются несколько консольных приложений, написанных на Фортране (и не на все у меня есть исходники), которые результаты работы записывают в файлы. Соответственно мне надо посмотреть, что насчитала предыдущая программа, и вручную запустить следующую. Если расчетов много, то вся эта процедура становится сильно морочливой, надо постоянно сидеть и втыкать на экран.

Потому возникла идея написать небольшую управляющую программу, которая сама будет в нужной последовательности их запускать и проверять результаты. Сильно глубоко углубляться при этом не хочется, в системном программировании я не силен, в основном расчетами занимаюсь
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
20.02.2021, 15:47
Цитата Сообщение от archerix Посмотреть сообщение
Если расчетов много, то вся эта процедура становится сильно морочливой
так может быть тебе тогда и с++ то вообще не нужен для такой задачи.
попробуй описать суть задачи вот здесь
0
2 / 2 / 1
Регистрация: 08.02.2020
Сообщений: 215
20.02.2021, 16:21
Мне казалось, Фортран не самый подходящий язык для управления другими программами, так что приходится
Про БАТ-файлы я в курсе, но мне надо не просто их запускать по очереди, но еще и проверять, что они выдают, и готовить файлы с входными параметрами.
0
 Аватар для Recrut_rf
389 / 334 / 66
Регистрация: 14.10.2014
Сообщений: 1,474
20.02.2021, 16:35
archerix, можно на Qt'е накатать довольно быстро, хотя х/з как оно на самом деле будет - на первый взгляд всё довольно просто - клепаем прогу на Qt'е с графическим дизайном. Из неё запускаем нужную консольную прогу (при помощи функций winAPI). Они пишут результаты работы в файлы, которые опять же читаем и выводим кутешной прогой. Как то так. А как начнёшь делать - обязательно в чём-нибудь "закопаешься"
0
2 / 2 / 1
Регистрация: 08.02.2020
Сообщений: 215
20.02.2021, 17:08
Да мне графический интерфейс особо без надобности.
0
2 / 2 / 1
Регистрация: 08.02.2020
Сообщений: 215
21.02.2021, 11:12
Можно, я тут спрошу заодно?

Возник дополнительный вопрос - если входные параметры были заданы неудачно и расчеты привели к ошибке, скажем, по корню из отрицательного или переполнению, консоль не закрывается и продолжает висеть на экране. Не то чтобы мешало, но некрасиво

Как попроще прибить лишнее окно вручную?
0
2 / 2 / 1
Регистрация: 08.02.2020
Сообщений: 215
26.02.2021, 11:24
Возник вопрос с функцией isProcessRun(LPTSTR processName) с первой страницы, определяющей, запущено ли приложение. Если я просто пишу ей название программы в кавычках, все работает. А если я хочу передать название процессы через переменную? Битый час читаю Интернет, так и не понял, как мне обычную строку превратить в этот LPTSTR
0
 Аватар для Recrut_rf
389 / 334 / 66
Регистрация: 14.10.2014
Сообщений: 1,474
26.02.2021, 11:46
(LPTSTR)нужная строка, так же можно попробовать static_cast, reinterpret_cast<>() - это первое что в голову приходит.

Добавлено через 2 минуты
Тип LPTSTR эквивалентен TCHAR* значит можно сразу создавать строку TCHAR*
0
2 / 2 / 1
Регистрация: 08.02.2020
Сообщений: 215
26.02.2021, 17:52
Можно сразу, хотя было бы удобнее на месте переконвертировать - сильно много переменных заводится. Надо одно и то же держать в LPTSTR, string и LPCTSTR.
0
2 / 2 / 1
Регистрация: 08.02.2020
Сообщений: 215
28.02.2021, 22:11
Ну, наконец все вроде заработало, спасибо всем откликнувшимся
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.02.2021, 22:11

Запуск exe файла в графическом режиме
Помогите пожалуйста как сделать так чтобы по нажатию клавиши запускался определенный ехе файл у меня есть 5 ехе-шников и при нажатии на...

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

Запуск из программы стороннего приложения в DOS
Добрый день! Необходимо в ходе выполнения программы запустить другое .exe приложение в DOS. Гугл не помог, все ссылки выводятся на...

Взять данные со стороннего файла
Сразу извиняюсь, если создал тему в неположенной разделе и плохо сформулировал тему. В общем, есть программа, в которой в векторе хранятся...

Открытие стороннего файла (.docx)
Здравствуйте,подскажите как открыть файл формата &quot;file.docx&quot; в с++. Использую visual studio 2015. Например при нажатии на 1,просто...


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

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Эксперимент с картинкой-обложкой на CodinGame
Adler 10.07.2026
Решил на днях провести эксперимент. У меня есть аккаунт на CodinGame, ТОП-3 по РФ среди 2200 участников (в разделе соревнования по программированию ИИ-ботов). Там есть обложка, куда можно влепить. . .
После бана на Пикабу не работает авторизация аккаунта с Яндекса.
Hrethgir 09.07.2026
В частности https:/ / auto. ru/ logbook/ zapret-na-vozhdenie-posle-65-let_1cf28789-07b4-4c75-a2f7-4cd4edf9deeb тут хотел оставить комментарий такой Зрите в корень - монополизация на разработку программ. . .
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru