对不起,标题不好,但我不知道如何形容。
我正在构建一个控制台应用程序。一般的想法是,当输入这样的命令时,它会永久运行(并做一些后台工作):
App.exe run
然后我想在输入
时终止该应用程序App.exe exit
您将如何做?当我想要这样的行为时,我需要记住什么吗?还是有更好的方法?
我知道args []已存储所有参数,但是您将如何“查找”另一个正在运行的进程并终止它?据我了解,在运行然后退出时,我只打开了两次程序。因此,退出需要关闭正在运行的进程及其自身。
答案 0 :(得分:1)
我曾经想过要使用注册表项,因此在执行第一个App.exe run
时,它将注册表项设置为某个值(即true
),并定期检查以查看是否仍为true
,如果不是,则使用Environment.Exit(0)
关闭。
现在,您的App.exe exit
需要将该注册表项更新为false
。这似乎是一个非常紧凑的解决方案,因为您不必担心找到某个进程并将其杀死,实际上,两个程序执行都不需要知道另一个进程,因为它只是在更新注册表项。
另一种解决方案是对一个临时文本文件执行相同的操作,但是我建议在此之前使用注册表项选项。
这里有RegistryKey
类的一些文档供您参考。我在以前的项目中已经使用过很多次了,所以它应该适合您的情况。
https://docs.microsoft.com/en-us/dotnet/api/microsoft.win32.registrykey?view=netframework-4.7.1
为使您开始使用此选项,我将在Software配置单元中手动创建密钥,然后使用以下命令进行访问。
RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software");
答案 1 :(得分:0)
实现此目标的一种方法是仅允许运行应用程序的一个实例。
此question提供了用于创建单实例应用程序的解决方案。 调用该应用程序时,您可以验证是否已经有一个正在运行的实例并关闭该实例(所提供的问题已对此提供了解决方案)。
答案 2 :(得分:0)
以@ivcubr(及其他)的答案为基础,您有一些简单的选择:
我认为#3是最简单的实现方式,除非您已经具有使用选项#1或#2的先例(或另一个很好的理由)。
答案 3 :(得分:-1)
您可以使用Application.Exit()
方法