Problème dans la fonction CreateProcess !
-
19-09-2019 - |
Question
J'ai mon application principale, à partir de mon application principale, j'appellerai un autre module (tiers) pour effectuer une petite fonction Il montre le processus dans la fenêtre Commmand avec certaines informations ... maintenant que mon application principale attend jusqu'à ce que le module appelé termine son processus. Maintenant que ma question est ... comment je cache cette fenêtre de commande sans déranger son processus ... j'ai essayé d'utiliser La création mais cela ne semble pas fonctionner ...
Par exemple:mon application principale est le processus parent et l'application appelée est le processus enfant..Le processus parent doit être indépendant du processus enfant..vérifiez mon exemple ci-dessous
int main()
{
execl("c:\\users\\rakesh\\Desktop\\calledapplication.exe","c:\\users\\rakesh\\Desktop \\calledapplication.exe",0);
}
code in calledapplication
int main
{
printf("Rakesh");
}
Maintenant, considérant ce qui précède si vous exécutez le premier programme ... la sortie apparaîtra dans la même fenêtre de commande (ce ne devrait pas être comme ça) ... Je veux que l'application principale crée le processus mais il ne devrait pas être affecté par le processus de l'enfant.
La solution
Passer CREATE_NO_WINDOW
dans le dwCreationFlags
paramètre de CreateProcess
.
Autres conseils
Vous avez parlé d'une « fenêtre de commande », donc je suppose que l'enfant est une application console. Dans ce cas, vous pouvez créer le processus dans un Conole séparé et éventuellement forcer la nouvelle console à iconifiée ou caché. Le code suivant lancer un processus enfant qui interprète un fichier batch (MyTest.bat). J'espère que cela peut vous aider. Cordialement.
#include <windows.h>
#include <stdio.h>
int main(int argc, char **argv)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
BOOL rv = FALSE;
WCHAR cmdline[] = TEXT("cmd.exe /c mytest.bat");
memset(&si,0,sizeof(si));
si.cb = sizeof(si);
// Add this if you want to hide or minimize the console
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE; //or SW_MINIMIZE
///////////////////////////////////////////////////////
memset(&pi,0,sizeof(pi));
rv = CreateProcess(NULL, cmdline, NULL, NULL,
FALSE, CREATE_NEW_CONSOLE,
NULL, NULL, &si, &pi);
if (rv) {
WaitForSingleObject(pi.hProcess, INFINITE);
printf("Done! :)\n");
}
else {
printf("Failed :(\n");
}
return rv ? 0 : 1;
}
On dirait que vous voulez la sortie du processus enfant apparaisse dans une fenêtre séparée. Si oui, vous voulez appeler CreateProcess
et passer le drapeau CREATE_NEW_CONSOLE
, plutôt que d'utiliser exec*
.