繁体   English   中英

如何退出正在运行的控制台应用程序?

[英]How do i exit a running console app?

对不起,标题不好,但我不知道如何形容。

我正在构建一个控制台应用程序。 一般的想法是,当输入这样的命令时,它会永久运行(并做一些后台工作):

App.exe run 

然后,我想在进入时终止该应用

App.exe exit

你会怎么做? 当我想要这样的行为时,我需要记住什么吗? 或者,还有更好的方法?

我知道args []已存储所有参数,但是您将如何“查找”其他正在运行的进程并终止它呢? 据我了解,在运行然后退出时,我只打开了两次程序。 因此,退出需要关闭正在运行的进程及其本身。

我曾经想过要使用注册表项,因此在执行第一个App.exe run时,它将注册表项设置为某个值(即true ),并定期检查以查看它是否仍然为true以及是否为true然后使用Environment.Exit(0)关闭。

现在,您的App.exe exit将需要将该注册表项更新为false 这似乎是一个非常紧凑的解决方案,因为您不必担心找到某个进程并将其杀死,实际上,两个程序执行都不需要知道另一个进程,因为它只是在更新注册表项。

另一个解决方案是对一个临时文本文件执行相同的操作,但是我建议在此之前使用注册表项选项。

这里是RegistryKey类的一些文档,供您参考。 我在以前的项目中已经使用过很多次,因此它应该适合您的情况。

https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.win32.registrykey?view=netframework-4.7.1

为了让您开始使用此选项,我将在Software配置单元中手动创建密钥,然后使用以下命令进行访问。

RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software");

实现此目的的一种方法是仅允许运行应用程序的一个实例。

这个问题提供了创建单实例应用程序的解决方案。 调用该应用程序时,您可以验证是否已经有一个正在运行的实例并关闭该实例(所提供的问题已对此提供了解决方案)。

基于@ivcubr(和其他)的答案,您有几个简单的选择:

  1. 利用操作系统查找并终止进程(例如,使用pid和某种形式的“ kill”)
  2. 使用命名管道或任何其他类型的IPC在应用程序实例之间直接通信
  3. 使用外部挂钩。 这可以是注册表项,任何类型的文件系统文件或数据库。 它可以是您的应用程序(所有实例)可以定期轮询(或在其更改时收到通知)以查看何时该退出应用程序实例的任何内容。

我认为#3是最简单的实现方式,除非您已经有使用选项#1或#2的先例(或另一个很好的理由)。

您可以使用Application.Exit()方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM