【问题标题】:Windowed and Windowless Applications Together有窗口和无窗口的应用程序一起使用
【发布时间】:2015-07-12 21:04:43
【问题描述】:

我正在使用 VB.NET 2013 Express。

我有一个包含两个项目的解决方案,比如说 AABB

AA 是一个常规的 WinForms 应用程序。

BB 是一个无窗口的 WinForms 应用程序。

AA 可能会在整个会话期间多次打开和关闭。当 AA 打开时,它应该查看 BB 是否已经在运行,如果没有,则启动它。

BB 将一直运行,直到 PC (Windows 7) 关机。

如果 BB 已经在运行,我需要某种方式进行测试。

我尝试将状态写入文件,但我不知道如何在 BB 上获得关闭事件以重置下一个会话的状态。

如果可以避免的话,我真的不想在计算机的启动菜单中添加任何内容。有没有更好的办法?

【问题讨论】:

标签: c# .net vb.net winforms events


【解决方案1】:

这完全取决于您的需要,但我想到了两种方法。

检查BB进程是否正在运行

在我看来,这是最简单快捷的方法。只需检查一下 BB 进程是否正在运行,然后执行任何操作:

bool IsProcessRunning(string processName)
{
        return (System.Diagnostics.Process.GetProcessesByName(processName).Length != 0);
}

将 BB 设为单实例表单,每次都从 AA 调用它

查看这篇关于制作单实例 WinForms 的帖子

What is the correct way to create a single instance application?

这样你就可以每次都调用 BB 而无需先检查它是否正在运行。

【讨论】:

  • 由于某种原因,这不起作用。我总是得到一个空的进程数组。任务管理器将" *32" 附加到可执行文件名称中,我也尝试过这样做,但这并没有帮助,我仍然得到一个零长度数组。
  • 您是否尝试过以管理员身份运行该应用程序?听起来您无权检查正在运行的进程。如果仍然无法正常工作,也许您可​​以在答案中添加一些代码,因为我的方式绝对正确;-)
  • 我使用 Mutex 让它工作。谢谢你的提示。这似乎也是一个更清洁的解决方案,尽管我可能错了。我在这里基本上遵循了这个例子。 stackoverflow.com/a/2627466/2228746
【解决方案2】:
bool bbexists = System.Diagnostics.Process.GetProcessesByName("BB").Length > 0 ;

如果需要,您可以获取/检查 BB 进程名称:

System.Diagnostics.Process.Process.GetCurrentProcess.ProcessName 

【讨论】:

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