Вопрос по windows, c++, winapi – Отличия CreateProcess и ShellExecute
Каковы основные различия между ними? Я хочу запустить только другой EXE-файл из моего приложения (C ++). Существуют ли различия при наследовании сред, функций безопасности и т. Д.?
Основное отличие заключается в гибкости.ShellExecute
проще в использовании, но не обладает большой гибкостью.CreateProcess
это боль в использовании, но позволяет вам делать все что угодно.
Просто, например, сCreateProcess
Вы можете указать дескрипторы (каналы или файлы), которые будут использоваться для стандартных потоков ввода / вывода / ошибок в дочернем элементе.ShellExecute
не дает вам желаемого способа сделать это.
Вероятно, также стоит отметить, что хотяShellExecute
can использоваться для непосредственного запуска исполняемого файла, его основной целью является «выполнить» файлы документов - например, скажите «выполнить» & quot; what.html & quot ;, и он запускает веб-браузер по умолчанию и загружает в него указанный файл HTML. Вы можете сделать это с помощьюCreateProcess
но, чтобы сделать это, вы (обычно) начинаете с вызоваFindExecutable
чтобы найти программу, связанную с данным файлом данных, затем выполните эту передачу файла данных в качестве параметра.
Основное различие междуCreateProcess
а такжеShellExecute
является следующим:CreateProcess
более ориентирован на низкий уровень иShellExec
на высоком рычаге пользователя, который видит пользователя в проводнике.
Например, использованиеCreateProcess
можно использовать командную строку, длина которой больше, чемMAX_PATH
, Он имеет ограничение в 32 768 символов. Вы также можете использоватьCreateProcess
запустить программу (если у вас достаточно прав) на другом рабочем столе Windows, как на экране входа в систему.
Другой пример. Ты можешь использоватьShellExecute
запустить панель управления или открыть любую программу, существующую на компьютере, для редактирования, например, файла JPG. Так вы работаете сShellExecute
близко к соответствующим действиям в проводнике Windows.
lpApplicationName
Error: User Rate Limit ExceededlpCommandLine
Error: User Rate Limit ExceededlpCommandLine
Error: User Rate Limit Exceededthe documentationError: User Rate Limit ExceededlpApplicationName
Error: User Rate Limit ExceededlpCommandLine
Error: User Rate Limit Exceeded
"\\?\"
Error: User Rate Limit Exceeded