我有一个Windows服务,它在启动时监视文件系统。现在我需要有一个类似的应用程序应该在后台运行。我已将代码移植到控制台应用程序,但我需要从任何外部程序手动控制此应用程序。在后台运行控制台应用程序,直到我退出它
MyExternalProgram
{
Start(Myconsole)
// Do some operations.
Exit(MyConsole)
}
与上面类似。任何输入?
我有一个Windows服务,它在启动时监视文件系统。现在我需要有一个类似的应用程序应该在后台运行。我已将代码移植到控制台应用程序,但我需要从任何外部程序手动控制此应用程序。在后台运行控制台应用程序,直到我退出它
MyExternalProgram
{
Start(Myconsole)
// Do some operations.
Exit(MyConsole)
}
与上面类似。任何输入?
如果你罚款刚刚闭幕的控制台应用程序,该simpliest的方法是使用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发送一个退出信号到您的控制台应用程序,但我认为这会对您的情况矫枉过正。
您可以在VB中使用SHELL函数启动应用程序。您可以设置为最小化参数:
Optional ByVal Style As AppWinStyle = AppWinStyle.MinimizedFocus
但是,这只会启动您的应用程序的一个实例。如果其他程序在自己的或命令行的shell中向应用程序发送了参数,那么在大多数情况下应该是单独的实例(和PID)。
此窗口服务执行的操作无法通过[FileSystemWatcher](http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx)完成吗?如果没有,那么只需使用'FileSystemWatcher'来重新实现,并避免产生其他应用程序。 – Adrian
Adrain,我已经在我的控制台应用程序中重新实现了FileSystemWatcher。但有没有办法让这个控制台应用程序直播,直到我手动退出它。因为我的事件如OnChanged和OnRenamed在于控制台应用程序。所以应用程序应该直播,直到我退出它。 – Rupesh