-1

当加载 Windows 表单时,我需要创建正在运行的 Windows 进程(在任务管理器中看到的),因为我需要由 nagios (http://www.nagios.org/) 监视此应用程序。因此,当表单加载时,exe 将在后台进程中运行,当表单关闭时,该进程也必须停止。

更新

因此,当表单加载时,当前的 ApplicationName.exe 将显示在任务管理器进程选项卡中,当表单关闭时,ApplicationName.exe 也必须停止。

我还发现,当您在不调试的情况下启动时,ApplicationName.exe 将显示在任务管理器的进程选项卡中,但如果您开始调试 (F5),您将不会在进程选项卡中看到 ApplicationName.exe。现在我想确保即使我将开始调试它,我仍然可以在进程选项卡中看到 ApplicationName.exe。我怎么做?

4

3 回答 3

0

需要澄清:是运行 Nagios 监视器的附加进程,还是您创建的其他进程?

无论哪种方式,您都可以使用 Process.Start() 从您自己的内部启动一个单独的应用程序:

//event handler for the form's Load event
public void MyWindow_FormLoad(object sender, EventArgs e)
{
   //kick off the process you want
   Process.Start(@"C:\Program Files\MyOtherApp\MyOtherApp.exe");
}

有允许您指定参数或自定义进程的启动行为的重载。但这是基本调用,(给定一个真实的程序位置)应该将单独的 EXE 作为具有默认启动行为的新进程启动(就像您在 Windows 资源管理器中双击它一样)。

现在,如果您需要更多信息,例如让两个程序相互交谈的方法,那么您需要使用适当的详细信息扩展您的问题。

编辑评论:啊。好吧,这有点不同。

通常,在任何给定时间运行的任何 EXE 默认都会出现在任务管理器的进程列表中,无需特殊编码。事实上,很难让进程不出现在该列表中,因为不想被看到的进程是病毒的标志之一。

但是,当您从 Visual Studio 以调试模式运行应用程序时,代码会在 VS 的进程边界内编译和运行,并且不会显示为它自己的进程。为了让它在任务管理器中显示为自己的进程,编译的应用程序必须从 VS 外部运行。你仍然可以调试它,在你启动它之后,通过将 VS 的调试器“附加”到正在运行的进程。但是,这意味着应用程序必须足够稳定且运行时间足够长,以便您手动附加到它。在达到“休息”状态时已完成大部分或全部执行的程序需要进行一些修改,以便等待您附加到它,然后再执行您想要调试的任何操作。

于 2012-04-10T14:25:43.273 回答
0

如果您只想要一个您编写的 Windows 窗体应用程序在它运行时显示在进程列表中,那么您会发现它仍然存在。你不需要做任何特别的事情来让它在自己的进程中运行。例如我在 VS2010 中做了一个简单的开箱即用的 Windows 窗体应用程序

Vanilla Windows 窗体应用程序

然后运行它(没有调试),它在任务管理器的进程列表中。

任务管理器的运行进程列表

(注意我运行的是 Win8,所以你的任务管理器可能看起来有点不同。)

但是,如果您需要知道不是您编写的 Windows 窗体应用程序何时由用户启动和停止,您需要查看此问题的答案中提到的 Windows 挂钩或在进程创建/修改/关闭事件中Windows 管理规范 (WMI) API

于 2012-04-10T14:47:18.293 回答
0

我有 Test.exe ,一个示例 winform 应用程序。并将其用作 Process

    public Process process = new Process(); 
    protected override void OnLoad(EventArgs e)
    {
        process.StartInfo.Verb = "open";
        process.StartInfo.FileName = "Test.exe"; //Give your App or Process Name
        process.StartInfo.WorkingDirectory = @"C:\Users\sali\Documents\Visual Studio2010\Projects\Test\Test\bin\Debug"; //Give your App or Process path
        process.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
        process.Start();
    }

我希望它有所帮助或者如果您需要不同的东西,请随时询问

于 2012-04-10T15:08:04.593 回答