Classe 'Process' est utilisé pour créer et/ou contrôler et surveiller des processus spécifiques.
application console uniquement obéira CreateNoWindow = true, alors que Windows Forms et WPF applications ignorera.
Étant donné que vous avez démarré un autre processus sur le système, ce processus continuera seul et ne sera pas arrêté une fois que vous aurez arrêté le processus parent . Cependant, certaines ressources subsistent (en particulier thread et handle) dans le processus parent qui empêche la terminaison du processus parent lorsque sa fenêtre principale est fermée.
mort interrompt l'exécution du processus normal et les forces arrêter le plus tôt possible donc il est normal que les gestionnaires de fermeture ne sont pas exécutés
EDIT:
Pour le test créer application WPF et mettre le code suivant dedans:
public MainWindow() {
InitializeComponent();
Loaded += MainWindow_Loaded;
Closed += MainWindow_Closed;
}
private Process process;
private void MainWindow_Closed(object sender, EventArgs e) {
// Log("WpfApp3.log", $"{DateTime.Now} Closed");
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e) {
// Log("WpfApplication3.log", $"{DateTime.Now} Loaded");
process = new Process {
StartInfo = {
UseShellExecute = false,
// FileName = @"..\..\WpfApp2\bin\Debug\WpfApp2.exe",
FileName = @"..\..\CnslApp1\bin\Debug\CnslApp1.exe",
// FileName = @"..\..\WnFrmApp2\bin\Debug\WnFrmApp2.exe",
CreateNoWindow = true
}
};
process.Start();
var result = process.CloseMainWindow();
if (result) {
...
}
}
Ensuite, créez trois nouveaux projets; un pour chaque Console/Windows Forms/WPF. et entrez le chemin correct vers l'exécutable dans le paramètre 'FileName' du StartInfo. Ensuite, vous pouvez jouer avec des paramètres pour voir comment chacun va se comporter.
Dans mon cas, process.CloseMainWindow() n'a eu aucun effet tant qu'il n'a pas été déplacé dans une autre méthode car le processus n'a pas encore été démarré. Mais une fois déplacé dans un gestionnaire de boutons et exécuté, il mettra fin aux trois types (un peut être utilisé à la fois avec cet exemple).
La seule exception était l'application Console lorsque la fenêtre était masquée.
Cela dépend de ce que vous exécutez! tandis que le spectacle aucune fenêtre n'est passée à la commande d'exécution de l'application (alors qu'il devrait) n'a pas à l'honorer pour les autres fenêtres, il se sent comme vomir – BugFinder
Pouvez-vous mieux expliquer.J'ai compris qu'il ne peut pas fonctionner pour chaque type de programme, donc je devrais supposer que WPF n'est pas compatible avec l'option nowindow. Je n'ai pas compris "n'a pas à l'honorer pour toutes les autres fenêtres, il se sent comme vomir". Qu'en est-il de la partie finale? –
tout processus que vous engendrez peut et fera ce qu'il veut .. et selon l'application, vous avez peut-être engendré un processus, mais à moins que vous ne terminiez ce processus en fermant votre application ne le terminera – BugFinder