Quali sono le principali differenze tra i due? Sono disposto a eseguire solo un altro EXE dalla mia applicazione (C++). Ci sono delle differenze quando si ereditano gli ambienti, le caratteristiche di sicurezza, ecc.?CreateProcess e ShellExecute differenze
risposta
La differenza principale tra CreateProcess
e ShellExecute
è il seguente: CreateProcess
è più orientato a basso livello e ShellExec
sulla leva alta utente che vede l'utente in esploratore.
Ad esempio l'utilizzo di CreateProcess
si può utilizzare la riga di comando la cui lunghezza è più come MAX_PATH
. Ha una restrizione di 32.768 caratteri. È inoltre possibile utilizzare CreateProcess
per avviare il programma (se si dispone di autorizzazioni sufficienti) su un altro desktop di Windows come nella schermata di accesso.
altro esempio. È possibile utilizzare ShellExecute
per avviare il Pannello di controllo o aprire qualsiasi programma esistente sul computer per la modifica di file JPG, ad esempio. Quindi lavori con ShellExecute
vicino alle azioni corrispondenti in Windows Explorer.
CreateProcess non può iniziare un processo se il percorso il programma ha superato MAX_PATH. Può passare lunghi argomenti a un programma che può essere avviato, ma è diverso. In sostanza non c'è modo al momento di avviare un programma che si trova più profondo di MAX_PATH (a meno che non v'è un breve 8.3 equivalente) – nikos
@nikos: Si può utilizzare sia '' lpApplicationName' e lpCommandLine' per specificare il programma con i parametri. La lunghezza massima di 'lpCommandLine' è limitata a 32.768 caratteri. È possibile leggere [la documentazione] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425 (v = vs.85) .aspx) che "Se lpApplicationName è NULL, il nome del modulo porzione di lpCommandLine è limitata ai caratteri MAX_PATH. ". Usando sia 'NpApplicationName' non NULL' e' lpCommandLine' si dovrebbe essere in grado di specificare la parte del modulo la cui lunghezza è maggiore di MAX_PATH. Penso che si dovrebbe usare il prefisso "\\? \" Nel percorso – Oleg
@nikos: Inoltre, a partire da Windows 10, versione 1607, le limitazioni MAX_PATH sono state rimosse dal comune file Win32 e dalle funzioni di directory (si veda [l'annuncio iniziale] (https : //mspoweruser.com/ntfs-260-character-windows-10/) e [la documentazione] (https: // msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath)). – Oleg
La principale differenza è in termini di flessibilità. ShellExecute
è più facile da usare, ma non ha molta flessibilità. CreateProcess
è un problema da usare, ma ti consente di fare qualsiasi cosa.
Ad esempio, con CreateProcess
, è possibile specificare handle (pipe o file) da utilizzare per i flussi di input/output/errore standard nel child. ShellExecute
non ti dà il modo di farlo.
E 'probabilmente anche la pena notare che, anche se ShellExecute
può essere utilizzato per avviare direttamente un eseguibile, il suo intento primario è quello di "eseguire" i file di documenti - per esempio, dire a "eseguire" una "whatever.html" e avvia il browser Web predefinito e carica il file HTML specificato. È possibile farlo usando CreateProcess
pure, ma per farlo, è (normalmente) avviare chiamando FindExecutable
di trovare il programma associato con il file di dati in questione, quindi eseguire che passa il file di dati come parametro.
CreateProcess
restituisce il manico e l'ID per il processo avviato ed è filo conduttore nella struttura PROCESS_INFORMATION
- 1. CreateProcess asincroni?
- 2. Haskell (:) e (++) differenze
- 3. VowpalWabbit: Differenze e scalabilità
- 4. Quali sono i parametri per "printto" usando shellexecute?
- 5. Perché Unix ha fork() ma non CreateProcess()?
- 6. come terminare un processo creato da CreateProcess()?
- 7. Nascondere la finestra del processo con 'CreateProcess'
- 8. Utilizzare CreateProcess per eseguire un file batch
- 9. Differenze tra NoClassDefFoundError e ClassNotFoundException?
- 10. Differenze tra funtori e endofuntori
- 11. Differenze tra express.Router e app.get?
- 12. Differenze tra VB.NET e VB
- 13. Differenze tra .ContextMenu e .ContextMenuStrip
- 14. Differenze tra Proc e Lambda
- 15. Differenze tra `input` e` raw_input`
- 16. Differenze tra App.Config e Web.Config?
- 17. Differenze tra Log e Logger?
- 18. Differenze tra Angular.js e Angular.dart?
- 19. differenze tra NSArray e CCArray
- 20. Differenze tra Coroutine e `goto`?
- 21. Differenze tra utf8 e latin1
- 22. Differenze tra DB2 e Oracle
- 23. Differenze tra Camel e BPEL
- 24. Differenze tra MSYS2 e Cygwin
- 25. Differenze tra org.apache.log4j.RollingFileAppender e org.apache.log4j.rolling.RollingFileAppender
- 26. Differenze tra OTL e SOCI
- 27. Differenze tra Agda e Idris
- 28. Differenze tra AVPlayer e MPMoviePlayerController
- 29. Differenze tra Boost.Coroutine e Boost.Coroutine2
- 30. Differenze tra Rijndael e AES
La [documentazione MSDN] (http://msdn.microsoft.com) vi danno queste informazioni. Questa domanda è completamente troppo vaga e non specifica per SO. Ci sono dozzine di domande che ne discutono entrambe e non hai mostrato assolutamente nessuno sforzo per cercare da soli. (Come un suggerimento: solo consente di specificare nulla circa l'ambiente, ereditando le maniglie, e altre informazioni lascio alle vostre abilità di ricerca per capire che uno..) –