我有一个 Windows 服务,它在启动文件系统时对其进行监控。现在我需要一个类似的控制台应用程序,它应该在后台运行。我已将代码移植到控制台应用程序,但我需要从任何外部程序手动控制此应用程序。
MyExternalProgram
{
Start(Myconsole)
// Do some operations.
Exit(MyConsole)
}
与上述类似。有输入吗?
我有一个 Windows 服务,它在启动文件系统时对其进行监控。现在我需要一个类似的控制台应用程序,它应该在后台运行。我已将代码移植到控制台应用程序,但我需要从任何外部程序手动控制此应用程序。
MyExternalProgram
{
Start(Myconsole)
// Do some operations.
Exit(MyConsole)
}
与上述类似。有输入吗?
如果您只需关闭控制台应用程序就可以了,最简单的方法是使用Process.CloseMainWindow
通过向其主窗口发送关闭消息来关闭具有用户界面的进程。
因此,使用 a 调用您的控制台应用程序,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向您的控制台应用程序发送退出信号,但我认为这对您的情况来说是多余的。
您可以在 VB 中使用 SHELL 函数启动应用程序。您可以使用参数设置为最小化:
Optional ByVal Style As AppWinStyle = AppWinStyle.MinimizedFocus
但是,这只会启动您的应用程序的一个实例。如果其他程序在自己的外壳或命令行中向应用程序发送参数,在大多数情况下,这将是一个单独的实例(和 PID)。