【问题标题】:Closing a running program from commandline从命令行关闭正在运行的程序
【发布时间】:2012-03-01 19:21:00
【问题描述】:

Visual Studio 2010 C#

是否可以从命令行运行和关闭程序?我需要做这样的事情:

myProgram.exe -start
-- do something --
myProgram.exe -stop

我知道如何实现第一部分(main 中的 String[] args),但是如何关闭正在运行的程序?


编辑

myProgram.exe 正在处理一些 UDP 通信,并且必须在执行中的内容时执行 - 做某事 - 执行。抱歉我说的不准确。

【问题讨论】:

  • 如果您使用 WinForms,这可能会有所帮助:stackoverflow.com/questions/4547643/…
  • 你能提供更多细节吗?
  • 这里的问题很难理解:“myProgram.exe”进程会在主函数完成后退出(不存在),即在“--do something--”之后完成了,就不用外杀了。如果这不是您提出的问题,您需要澄清您的问题。
  • myProgram.exe 必须在我 -- 做某事 -- 的整个过程中运行。完成之后(调用其他进程)myprogram.exe 应该被关闭。

标签: c# windows visual-studio-2010 command-line


【解决方案1】:

我猜你知道如何检查命令行参数并查找是否已指定停止?以下应该可以完成这项工作。

        var currentProcess = System.Diagnostics.Process.GetCurrentProcess();
        var matchingProcesses = System.Diagnostics.Process.GetProcesses().Where(x => x.Id != currentProcess.Id && x.ProcessName == currentProcess.ProcessName);
        foreach (var process in matchingProcesses) {
            process.Kill();
        }

【讨论】:

  • 这是一个很好的方法。我不会终止进程,而是向该进程发送消息。
  • 您也可以在应用程序中使用静态作为粗略的消息系统。即 killHasBeenSignalled = true 然后在开始条件下检查它。
  • 如何访问另一个任务的静态成员?
  • 是的,静态应该在同一个应用程序域中的任何正在运行的进程之间共享(我认为)。您需要考虑在访问或设置时使用锁是否合适。
【解决方案2】:

这样的事情可以使用taskkill吗?

即如果你想关闭myProgram.exe,你可以执行

taskkill /IM myProgram.exe

【讨论】:

  • 也可以用/F扩展这一行来强制关闭程序。
  • 我需要在关闭程序时做一些事情。是否可以注册由某种关闭事件触发的回调?
【解决方案3】:

使用旨在关闭进程的命令行程序 - pskill 就是这样一个程序。

pskill myProgram.exe

内置实用程序是taskkill

taskkill /im myProgram.exe

【讨论】:

    【解决方案4】:
    • 按名称获取进程 ID
    • 杀死进程

    【讨论】:

      【解决方案5】:

      正如 Fox32 在他的评论中已经提到的,你真的应该选择this approach,因为在这种情况下你的应用程序可以真正优雅地关闭自己。如果您只是简单地使用 taskkill 等从外部世界杀死您的进程,您可能真的会遇到麻烦,具体取决于您使用的资源(网络、数据库、文件等)。

      【讨论】:

        猜你喜欢
        • 2011-10-05
        • 2014-04-10
        • 2011-11-21
        • 1970-01-01
        • 2017-05-02
        • 2013-04-12
        • 2019-01-10
        • 2012-04-10
        • 1970-01-01
        相关资源
        最近更新 更多