【问题标题】:Run console application in background until I exit from it在后台运行控制台应用程序,直到我退出它
【发布时间】:2013-08-23 05:42:49
【问题描述】:

我有一个 Windows 服务,它在启动文件系统时对其进行监控。现在我需要一个类似的控制台应用程序,它应该在后台运行。我已将代码移植到控制台应用程序,但我需要从任何外部程序手动控制此应用程序。

MyExternalProgram
{
    Start(Myconsole)
    // Do some operations.
    Exit(MyConsole)
}

与上述类似。有什么意见吗?

【问题讨论】:

  • 此 Windows 服务是否执行了 FileSystemWatcher 无法完成的任务?如果没有,那么只需使用 FileSystemWatcher 重新实现,避免生成其他应用程序。
  • Adrain,我在控制台应用程序中重新实现了 FileSystemWatcher。但是有没有办法让这个控制台应用程序保持活跃,直到我手动退出它。因为我的 OnChanged 和 OnRenamed 等事件位于控制台应用程序中。所以应用程序应该一直存在,直到我退出它。

标签: vb.net multithreading console-application


【解决方案1】:

如果您只需关闭控制台应用程序就可以了,最简单的方法是使用Process.CloseMainWindow

通过向其主窗口发送关闭消息来关闭具有用户界面的进程。

所以使用Process 调用您的控制台应用程序,然后关闭它:

Dim p = new Process()
p.StartInfo.FileName = "c:\your\path\to\application.exe"
p.Start()
' p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden ' hide window
'
' do your stuff
'
p.CloseMainWindow()
' p.Kill() ' If window is hidden, you have to use Kill()

如果您不想显示此应用程序的窗口,请使用p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden,但您必须使用Process.Kill 停止它,这将立即停止该进程。

另一种方法是使用某种IPC 向您的控制台应用程序发送退出信号,但我认为这对您的情况来说是多余的。

【讨论】:

    【解决方案2】:

    您可以在 VB 中使用 SHELL 函数启动应用程序。您可以使用参数设置为最小化:

    Optional ByVal Style As AppWinStyle = AppWinStyle.MinimizedFocus
    

    但是,这只会启动您应用的一个实例。如果其他程序在自己的 shell 或命令行中向应用程序发送参数,那么在大多数情况下,这将是一个单独的实例(和 PID)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-17
      • 2011-02-10
      • 2018-12-07
      • 1970-01-01
      • 2012-12-12
      相关资源
      最近更新 更多