Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.99/132: Рейтинг темы: голосов - 132, средняя оценка - 4.99
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4

Как правильно запустить программу/процесс/приложение через CreateProcess()? Покажите пример

04.03.2021, 22:45. Показов 27722. Ответов 73
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу так
C++
1
2
3
4
5
6
7
8
#define N NULL
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si,sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi,sizeof(pi));
CreateProcess("C:\\Users\\123\\Desktop\\Названиевидеоролика.mp4",N,N,N,0,0,N,N,&si,&pi);//это только пример позже выяснил 
 // что строку не принимает
Даже толком не понятно какие параметры нужно писать.
Покажите свой пример а не копипаст из справки. Про дочерние процессы тоже не понял спрашиваю здесь Покажите пример дочерних и унаследованных процессов, но я смотрю у меня даже базовый обычный процесс не запускается.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.03.2021, 22:45
Ответы с готовыми решениями:

Как запустить консольное приложение через CreateProcess и спрятать его окно?
Т.е. как запустить досовский exe-шник через CreateProcess и чтобы его окна не было видно?

Как запустить программу через CreateProcess со стилем по умолчанию?
Добрый вечер ! Подскажите, пожалуйста, данный код запускает калькулятор Windows. Внешний его вид выглядит как-то ущербно. ...

Покажите пример как реализовать новости через RSS
Здравствуйте. Покажите пример как реализовать новости через RSS. То есть уже есть любой внешний новостной портал, я хочу чтобы просто на...

73
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
06.03.2021, 21:51  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Recrut_rf Посмотреть сообщение
выглядит как будто не один процесс, а много процессов
Я смотрел через TASKLIST вчера, я так понял что запускаются дочерние процессы про них тоже в одной из тем спрашивал ответов мало.

Добавлено через 2 часа 16 минут
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
CreateProcess
Как запустить firefox.exe через эту функцию?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
06.03.2021, 22:50
Цитата Сообщение от Nexi99 Посмотреть сообщение
Как запустить firefox.exe через эту функцию?
Ым... Я же показал вам в сообщении #4, как это делается. В чем проблема???
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
06.03.2021, 22:52  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Ым... Я же показал вам в сообщении #4, как это делается. В чем проблема???
Вы там запускали notepad.exe а запустить firefox.exe не получается
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
06.03.2021, 22:56
Цитата Сообщение от Nexi99 Посмотреть сообщение
а запустить firefox.exe не получается
Ну тут уж я не знаю, что там у вас не получается...
Миниатюры
Как правильно запустить программу/процесс/приложение через CreateProcess()? Покажите пример  
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
06.03.2021, 23:20  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Ну тут уж я не знаю, что там у вас не получается...
C++
1
2
3
4
5
6
7
8
9
10
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si,sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi,sizeof(pi));//в некоторых библиотеках макрос N существует если что определяйте его ниже если
//конечно вы не используете макрос N из библиотеки
#define N NULL
1. CreateProcess(L"firefox.exe",L"C:\\Program Files\\Mozilla Firefox",N,N,0,0,N,N,&si,&pi); не работает
2. CreateProcess(L"C:\\Program Files\\Mozilla Firefox",L"firefox.exe",N,N,0,0,N,N,&si,&pi); не работает
3. CreateProcess(L"\"C:\\Program Files\\Mozilla Firefox\\firefox.exe\" -L -S",N,N,N,0,0,N,N,&si,&pi); тоже не работает
Первые 2 варианта вроде и пробелы проглатывают но запуска нет. Требует ли firefox.exe запуска дочерних процессов в CreateProcess мне не известно.
notepad.exe запускается проверял
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
06.03.2021, 23:29
Цитата Сообщение от Nexi99 Посмотреть сообщение
Первые 2 варианта вроде и пробелы проглатывают но запуска нет.
Во всех трех вариантах написан бред.

Я вам выше ясно объяснил, как нужно запускать: куда поместить имя выполнимого файла, куда поместить параметры командной строки, и что делать с кавычками. Что за чушь вы тут понаписывали и почему - мне не ясно.
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
06.03.2021, 23:56  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Во всех трех вариантах написан бред.
Ну а как его писать так писал
C++
1
CreateProcess(L"C:\\Program Files\\Mozilla Firefox\\firefox.exe",N,N,N,0,0,N,N,&si,&pi);
ругается на пробелы и тоже не работает в вашем примере пробелов нет оно работает в system пишу так ""C:\\Program Files\\Mozilla Firefox\\firefox.exe" -L -S", но запись тоже выглядит сомнительно

Добавлено через 3 минуты
А это в system не работает
Code
1
2
"C:\Program" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
Глючный компилятор какой-то

Добавлено через 40 секунд
с пробелами в system так пишу ""C:\\Program Files\\Mozilla Firefox\\firefox.exe" -L -S"
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
07.03.2021, 01:26
Цитата Сообщение от Nexi99 Посмотреть сообщение
Ну а как его писать так писал
C++
1
CreateProcess(L"C:\\Program Files\\Mozilla Firefox\\firefox.exe",N,N,N,0,0,N,N,&si,&pi);
ругается на пробелы и тоже не работает
С чего бы это вдруг оно "ругается на пробелы"? Кто "ругается на пробелы"?

Цитата Сообщение от Nexi99 Посмотреть сообщение
в вашем примере пробелов нет оно работает
Чего? Как это нет? В моем примере путь точно такой же. С точно такими же пробелами. Все работает.
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
07.03.2021, 01:45  [ТС]
В system пробелы не идут, уже перепроверил в чёрт знает какой раз. Замучиться можно от всего этого.
CreateProcess может запускать процесс с разрешением дочерних процессов или с разрешением наследования, я хотел бы увидеть примеры таких процессов, и что они делают. Можете показать что-нибудь.
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
07.04.2021, 23:35  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Вот именно поэтому у функции CreateProcess есть отдельный первый параметр, через который и следует передавать имя выполнимого файла,
Т.е. слева можно написать имя файла, а 2ой параметр программа exe com, и получиться что файл запустится нужной программой?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
07.04.2021, 23:51
Цитата Сообщение от Nexi99 Посмотреть сообщение
Т.е. слева можно написать имя файла, а 2ой параметр программа exe com, и получиться что файл запустится нужной программой?
Не понимаю, о чем вы.

Первым параметром указывается что запускать, т.е. выполнимый файл. Вторым параметром передаются аргументы командной строки.

Что такое "программа exe com" я не понял.
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
08.04.2021, 00:29  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
передаются аргументы командной строки
Что подразумевается под этими элементами, не понятно зачем так замудрено писать инструкции. Я понятия не имею что это за термин

Добавлено через 31 минуту
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Не понимаю, о чем вы.
написал так
C++
1
2
3
4
5
6
7
8
9
10
char*put="C:\\Program Files (x86)\\Microsoft Office\\OFFICE11\\WINWORD.exe";
char*put1="C:\\Users\\123\\Desktop\\не сохни.doc";
 
STARTUPINFOA start_info={sizeof start_info};
PROCESS_INFORMATION proc_info={0};
cout<<"proc_info.hProcess "<<proc_info.hProcess<<" proc_info.dwProcessId "<<proc_info.dwProcessId<<en;
CreateProcessA(put,put1,0,0,0,0,0,0,&start_info,&proc_info);
cout<<"Pomidor "<<en;
cout<<"proc_info.hProcess "<<proc_info.hProcess<<" proc_info.dwProcessId "<<proc_info.dwProcessId<<en;
cout<<"закрываем "<<CloseHandle(proc_info.hProcess)<<en;
если поменять put и put1 вообще не работает, но в данном случае тоже выбивается ошибка открытия файла. так что не понятно как оно работает если нужно открыть файл.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
08.04.2021, 12:01
Цитата Сообщение от Nexi99 Посмотреть сообщение
В system пробелы не идут, уже перепроверил в чёрт знает какой раз.
C++
1
2
3
4
5
6
7
8
9
10
#include <stdlib.h>
 
//auto  command { R"("c:/Program Files/desktop.ini")" };
 
const char command []="\"c:/Program Files/desktop.ini\"";
 
int
main(){
    return system (command );
}
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
08.04.2021, 21:44  [ТС]
Цитата Сообщение от politoto Посмотреть сообщение
const char command []=""c:/Program Files/desktop.ini"";
Уже показали мне интересна ситуация указанная в посте выше о запуске файла и его исполняемой программы. Также мне интересно для чего нужна функция OpenProcess если есть CreateProcessA, я так понял для подключения к запущенному процессу и его модификации?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
09.04.2021, 00:57
Цитата Сообщение от Nexi99 Посмотреть сообщение
Что подразумевается под этими элементами, не понятно зачем так замудрено писать инструкции. Я понятия не имею что это за термин
???

Цитата Сообщение от Nexi99 Посмотреть сообщение
написал так
Что это за язык программирования?

Цитата Сообщение от Nexi99 Посмотреть сообщение
если поменять put и put1 вообще не работает
???

Цитата Сообщение от Nexi99 Посмотреть сообщение
так что не понятно как оно работает если нужно открыть файл.
Эксперимент показывает, что вторая часть должна начинаться с пробела

C
1
2
3
4
5
6
  char put[] = "C:\\Program Files\\Microsoft Office 15\\root\\office15\\WINWORD.EXE";
  char put1[] = " D:\\Users\\Public\\Documents\\Fax.doc";
 
  STARTUPINFOA start_info={sizeof start_info};
  PROCESS_INFORMATION proc_info={0};
  CreateProcessA(put,put1,0,0,0,0,0,0,&start_info,&proc_info);
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
09.04.2021, 01:35  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Эксперимент показывает, что вторая часть должна начинаться с пробела
Ошибка при попытке открытия файла. Попробуйте выполнить следующие действия.
* Проверьте разрешения на доступ к докуненту и диску. " Проверьте, достаточно ли памяти и места на диске.
* Откройте файл с помощью конвертера резервных копий.
Показать справку »
Всё равно ошибка пробел не спасает ситуацию
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
09.04.2021, 01:39
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Эксперимент показывает, что вторая часть должна начинаться с пробела...
... В ситуации, когда указаны оба параметра CreateProcess, функция подготавливает весь argv[] (начиная с argv[0]) для вызываемого процесса только на основе второго параметра (!). То есть в вашем примере имя документа попадет в argv[0], а не в argv[1], по каковой причине открытия документа не произойдет.

Это выглядит как несколько странноватое поведение CreateProcess, но таковы факты.

В качестве workaround можно предложить начинать вторую строку с пробела. В такой ситуации в вызываемой программе argv[0] получится пустой строкой, а все аргументы лягут в argv[] начиная с argv[1].

Пустой argv[0] - это, конечно же, не совсем корректно. Наверное, в свете такого странного поведения CreateProcess, правильнее вообще не пользоваться первым параметром (вопреки тому, что я советовал раньше), а целиком подготавливать полную командную строку во втором параметре. Если имя выполнимого файла содержит пробелы, то это имя нужно просто взять в кавычки. CreateProcess распознает и обрабатывает кавычки во втором параметре.

Добавлено через 32 секунды
Цитата Сообщение от Nexi99 Посмотреть сообщение
Ошибка при попытке открытия файла. Попробуйте выполнить следующие действия.
Я привел пример выше. У меня все прекрасно работает.
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
09.04.2021, 01:48  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Я привел пример выше. У меня все прекрасно работает.
Хотя некоторые запускает вставил английское название и пошло, в чём дело не знаю при этом ваших правил не соблюдал

Добавлено через 2 минуты
не пробел нужно ставить а вот почему не все файлы открывает это интересно

Добавлено через 3 минуты
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
то это имя нужно просто взять в кавычки. CreateProcess распознает и обрабатывает кавычки во втором параметре.
в инструкции писалось что с пробелами проблемно открывает, system прям сразу реагирует на пробелы и не работает пока экранирующие флэши не поставишь.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
09.04.2021, 02:03
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Наверное, в свете такого странного поведения CreateProcess, правильнее вообще не пользоваться первым параметром (вопреки тому, что я советовал раньше), а целиком подготавливать полную командную строку во втором параметре. Если имя выполнимого файла содержит пробелы, то это имя нужно просто взять в кавычки. CreateProcess распознает и обрабатывает кавычки во втором параметре.
Например

C++
1
2
3
4
5
  char put[] = "\"C:\\Program Files\\Microsoft Office 15\\root\\office15\\WINWORD.EXE\" D:\\Users\\Public\\Documents\\Fax.doc";
 
  STARTUPINFOA start_info={sizeof start_info};
  PROCESS_INFORMATION proc_info={0};
  CreateProcessA(NULL,put,0,0,0,0,0,0,&start_info,&proc_info);
Открывает без проблем.

Цитата Сообщение от Nexi99 Посмотреть сообщение
в инструкции писалось что с пробелами проблемно открывает
О чем речь? Берем в кавычки - вроде все работает. Какие проблемы?
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
09.04.2021, 02:47  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Открывает без проблем.
ну так не открывает
C++
1
2
char*put="C:\\Program Files (x86)\\Microsoft Office\\OFFICE11\\WINWORD.exe";
char*put1=" C:\\Users\\123\\Desktop\\не сохни.doc";
Написал английское название открыло, правда в части строки не сохни уже пробела не было. Там был файл Answer_1E048C8BAA646DE6432586090029B3CE
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.04.2021, 02:47

Запустить приложение с помощью CreateProcess
Создаю сервер для Lineage 2 ! В клиенте есть l2.exe я поменял расширение на l2.bin Пытался запустить через bat не получается, пишет...

Запустить консольное приложение CreateProcess
Мне необходимо запустить консольное приложение с некими параметрами. делаю так: procedure start(name,par:string); var Rlst:...

CreateProcess: кроме запуска процесса запустить и само приложение
Добрый день подскажите как мне кроме запуска процесса запустить и само приложение по пути Item-&gt;AppStart.c_str(), все перепробывал не...

Закрыть процесс, запущенный через CreateProcess
Добрый день! Имеется приложение на WinAPI. При нажатии клавиш Shift + C должен открываться блокнот (обязательно с использованием...

Нужно запустить паралельно 3 програми через CreateProcess
Не пойму как запустить паралельно несколько программ через CreateProcess


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru