2011-06-16 20 views
9

için CREACH_PROCESS ve CREATE_NO_WINDOW işlem oluşturma bayrakları arasındaki fark nedir? Bu iki işlem oluşturma bayrağı arasındaki farkı anlamaya çalışıyorum. msdn documentation, ayrım konusunda net değil.createprocess function

  • mu CREATE_NO_WINDOW işlemi DETACH_PROCESS hiçbir konsol sahipken bir pencere görüntülemeden bir konsol (standart giriş/çıkış akımları başlatılmış) olması neden olur?
  • Çocuğun bir çocuk için etkileri nelerdir?
  • Her bir bileşimde (üst konsolda konsol, ana konsol yok) X (alt yapı yürütülebilir (konsol) (ana), alt yapı yürütülebilir (konsol) (WinMain) gerektirmez) açıklayan davranış matrisi ne olurdu? ?
+0

"Her kombinasyon" ile ne demek istiyorsun? MSDN açıkça belirtir: "* Uygulama bir konsol uygulaması değilse ya da CREATE_NEW_CONSOLE veya" DETACHED_PROCESS "ile birlikte kullanılırsa. *" CREATE_NO_WINDOW "ifadesiyle bu bayrak göz ardı edilir. Yani bir anlamda karşılıklı olarak münhasırlar. – 0xC0000022L

+0

Çocuk ve ebeveyn konsol veya konsol olmayan yürütülebilirler için kombinasyonları kastettim. Ebeveyn konsol dışı bir uygulamadır ve DETACH_PROCESS bayrağından bir konsol uygulaması başlatırsam, konsol konsola ihtiyaç duyarsa çocuk hata verir. Tamamen C çalışma zamanının uygulanmasına bağlı olan – Manny

+0

. Doğru hatırlamıyorsam, MSVCRT böyle bir durumda sorun yaratmayacaktır. Diğer çalışma zamanları olabilir. – 0xC0000022L

cevap

13

Buradaki fark, başlangıç ​​işleminin yapabileceği şeydir. Her iki durumda da bir konsolu olmayacak. Ancak CREATE_NO_WINDOW seçeneği ile AttachConsole (ATTACH_PARENT_PROCESS) öğesini arayabilir ve ebeveynin konsol penceresine (varsa) erişebilir. Bu, DETACH_PROCESS belirttiğinizde açıkça çalışmayacaktır. Tek seçenek, başlatılan işlemin kendi konsolunu oluşturmak için AllocConsole() kullanmasıdır. Diğer bir deyişle, başlatılan sürecin DETACH_PROCESS kullanarak kendi konsolunuzda asla sohbet edemeyeceğinden emin olabilirsiniz.

+1

Rastgele not: powershell, * DETACH_PROCESS gibi * çalışmıyor. –

İlgili konular