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

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

04.04.2016, 19:45. Показов 11229. Ответов 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
390 / 335 / 66
Регистрация: 14.10.2014
Сообщений: 1,486
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
390 / 335 / 66
Регистрация: 14.10.2014
Сообщений: 1,486
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
390 / 335 / 66
Регистрация: 14.10.2014
Сообщений: 1,486
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
390 / 335 / 66
Регистрация: 14.10.2014
Сообщений: 1,486
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
390 / 335 / 66
Регистрация: 14.10.2014
Сообщений: 1,486
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
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru