Вопрос по windows, c++, winapi – Отличия CreateProcess и ShellExecute

8

Каковы основные различия между ними? Я хочу запустить только другой EXE-файл из моего приложения (C ++). Существуют ли различия при наследовании сред, функций безопасности и т. Д.?

MSDN docs дать вам эту информацию. Этот вопрос слишком расплывчатый и неспецифичный для SO. Существуют десятки вопросов, которые обсуждают оба вопроса, и вы показали, что абсолютно не пытаетесь исследовать это самостоятельно. (Подсказка: только один позволяет вам указать что-либо об окружающей среде, о наследовании дескрипторов и другую информацию. Я оставлю это на ваши исследовательские способности, чтобы выяснить, какой именно.) Ken White

Ваш Ответ

3   ответа
6

Основное отличие заключается в гибкости.ShellExecute проще в использовании, но не обладает большой гибкостью.CreateProcess это боль в использовании, но позволяет вам делать все что угодно.

Просто, например, сCreateProcessВы можете указать дескрипторы (каналы или файлы), которые будут использоваться для стандартных потоков ввода / вывода / ошибок в дочернем элементе.ShellExecute не дает вам желаемого способа сделать это.

Вероятно, также стоит отметить, что хотяShellExecute can использоваться для непосредственного запуска исполняемого файла, его основной целью является «выполнить» файлы документов - например, скажите «выполнить» & quot; what.html & quot ;, и он запускает веб-браузер по умолчанию и загружает в него указанный файл HTML. Вы можете сделать это с помощьюCreateProcess но, чтобы сделать это, вы (обычно) начинаете с вызоваFindExecutable чтобы найти программу, связанную с данным файлом данных, затем выполните эту передачу файла данных в качестве параметра.

13

Основное различие междуCreateProcess а такжеShellExecute является следующим:CreateProcess более ориентирован на низкий уровень иShellExec на высоком рычаге пользователя, который видит пользователя в проводнике.

Например, использованиеCreateProcess можно использовать командную строку, длина которой больше, чемMAX_PATH, Он имеет ограничение в 32 768 символов. Вы также можете использоватьCreateProcess запустить программу (если у вас достаточно прав) на другом рабочем столе Windows, как на экране входа в систему.

Другой пример. Ты можешь использоватьShellExecute запустить панель управления или открыть любую программу, существующую на компьютере, для редактирования, например, файла JPG. Так вы работаете сShellExecute близко к соответствующим действиям в проводнике Windows.

Error: User Rate Limit ExceededlpApplicationNameError: User Rate Limit ExceededlpCommandLineError: User Rate Limit ExceededlpCommandLineError: User Rate Limit Exceededthe documentationError: User Rate Limit ExceededlpApplicationNameError: User Rate Limit ExceededlpCommandLineError: User Rate Limit Exceeded
Error: User Rate Limit Exceededthe initial announcementError: User Rate Limit Exceededthe documentation).
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededGetShortPathNameError: User Rate Limit Exceeded"\\?\"Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededzabkat.com/blog/long-8.3-path-names.htm
3

CreateProcess возвращает дескриптор и идентификатор запущенного процесса и его основной поток вPROCESS_INFORMATION состав

Похожие вопросы