¿Cuáles son las principales diferencias entre los dos? Estoy dispuesto a ejecutar solo otro EXE desde mi aplicación (C++). ¿Hay alguna diferencia al heredar entornos, características de seguridad, etc.?CreateProcess y ShellExecute diferencias
Respuesta
La principal diferencia entre CreateProcess
y ShellExecute
es la siguiente: CreateProcess
está más orientado en nivel bajo y ShellExec
en la palanca de alta usuario que ver el usuario en el explorador.
Por ejemplo usando de CreateProcess
uno puede usar la línea de comando cuya longitud es más como MAX_PATH
. Tiene una restricción de 32,768 caracteres. También puede usar CreateProcess
para iniciar el programa (si tiene suficientes permisos) en otro escritorio de Windows como en la pantalla de inicio de sesión.
Otro ejemplo. Puede usar ShellExecute
para iniciar el Panel de control o abrir cualquier programa que exista en la computadora para editar JPG archivado, por ejemplo. Entonces usted trabaja con ShellExecute
cerca de las acciones correspondientes en el Explorador de Windows.
CreateProcess NO puede iniciar un proceso si el camino a el programa tiene más de MAX_PATH. Puede pasar largos argumentos a un programa que se puede iniciar, pero eso es diferente. Básicamente no hay forma en el presente de iniciar un programa que se encuentra más allá de MAX_PATH (a menos que haya un corto 8.3 equivalente) – nikos
@nikos: Se puede usar tanto 'lpApplicationName' como' lpCommandLine' para especificar el programa con parámetros. La longitud máxima de 'lpCommandLine' está limitada a 32.768 caracteres. Puede leer en [la documentación] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425 (v = vs.85) .aspx) que "Si lpApplicationName es NULL, el nombre del módulo La porción de lpCommandLine está limitada a MAX_PATH caracteres ". Al usar tanto NULL 'lpApplicationName' como' lpCommandLine' uno debería poder especificar la parte del módulo cuya longitud es mayor como MAX_PATH. Creo que uno debería usar el prefijo "\\? \" En la ruta – Oleg
@nikos: Además, a partir de Windows 10, versión 1607, las limitaciones MAX_PATH se han eliminado de las funciones comunes de archivos y directorios de Win32 (ver [el anuncio inicial] (https : //mspoweruser.com/ntfs-260-character-windows-10/) y [la documentación] (https: // msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath)). – Oleg
La principal diferencia está en la flexibilidad. ShellExecute
es más fácil de usar, pero no tiene mucha flexibilidad. CreateProcess
es difícil de usar, pero le permite hacer cualquier cosa.
Solo por ejemplo, con CreateProcess
, puede especificar identificadores (conductos o archivos) para utilizar para las secuencias de entrada/salida/error estándar en el elemento secundario. ShellExecute
no le da ganas de hacer eso.
Es probable que también vale la pena señalar que aunque ShellExecute
puede usarse para iniciar un ejecutable directamente, su intención principal es "ejecutar" archivos de documentos - por ejemplo, dilo a "ejecutar" a "whatever.html" , y enciende su navegador web predeterminado y carga el archivo HTML especificado en él. También puede hacerlo usando CreateProcess
, pero para hacerlo, (normalmente) comienza por llamar al FindExecutable
para encontrar el programa asociado con el archivo de datos en cuestión, y luego ejecutarlo pasando su archivo de datos como parámetro.
CreateProcess
devuelve el identificador y la identificación para el proceso iniciado y es el hilo principal de la estructura PROCESS_INFORMATION
- 1. Sistema vs ShellExecute - ¿Diferencias?
- 2. CreateProcess asincrónico?
- 3. ShellExecute equivalente en .NET
- 4. equivalente OSX de ShellExecute?
- 5. CreateProcess falla en Windows 7
- 6. ¿Por qué Shellexecute = false rompe esto?
- 7. ¿Esperar antes de llevar a cabo ShellExecute?
- 8. ¿Qué motivos pueden hacer que ShellExecute falle?
- 9. VowpalWabbit: Diferencias y escalabilidad
- 10. Diferencias RMI y CORBA?
- 11. @synchronized() y NSLock diferencias
- 12. Haskell (:) y (++) diferencias
- 13. ¿Hay diferencias entre "y"
- 14. CreateProcess desde el búfer de memoria
- 15. cómo finalizar un proceso creado por CreateProcess()?
- 16. CreateProcess() falla con una infracción de acceso
- 17. Diferencias entre OTL y SOCI
- 18. Diferencias entre JPA y JPA2
- 19. diferencias entre scipy.sparse.linalg.lsmr y scipy.sparse.linalg.lsqr
- 20. Diferencias entre App.Config y Web.Config?
- 21. Diferencias entre `input` y` raw_input`
- 22. Diferencias entre Sproutcore y Ember
- 23. Diferencias entre Excepción y Error
- 24. Diferencias entre Proc y Lambda
- 25. Diferencias entre NoClassDefFoundError y ClassNotFoundException?
- 26. ¿Diferencias entre Smalltalk y python?
- 27. Diferencias entre Ant y Maven
- 28. diferencias entre memchr() y strchr()
- 29. Diferencias entre DB2 y Oracle
- 30. Diferencias entre utf8 y latin1
El [docs MSDN] (http://msdn.microsoft.com) le dan esta información. Esta pregunta es demasiado vaga y no específica para SO. Hay docenas de preguntas que discuten ambas, y usted no ha demostrado absolutamente ningún esfuerzo para investigar esto usted mismo. (Como una pista: solo uno le permite especificar cualquier cosa sobre el entorno, heredando identificadores y otra información. Dejo a su capacidad de investigación averiguar cuál) –