2013-08-23 158 views
0

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

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

与上面类似。任何输入?

+0

此窗口服务执行的操作无法通过[FileSystemWatcher](http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx)完成吗?如果没有,那么只需使用'FileSystemWatcher'来重新实现,并避免产生其他应用程序。 – Adrian

+0

Adrain,我已经在我的控制台应用程序中重新实现了FileSystemWatcher。但有没有办法让这个控制台应用程序直播,直到我手动退出它。因为我的事件如OnChanged和OnRenamed在于控制台应用程序。所以应用程序应该直播,直到我退出它。 – Rupesh

回答

1

如果你罚款刚刚闭幕的控制台应用程序,该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发送一个退出信号到您的控制台应用程序,但我认为这会对您的情况矫枉过正。

0

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

Optional ByVal Style As AppWinStyle = AppWinStyle.MinimizedFocus 

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

相关问题