C# VB.net显示外部程序的多个实例

C# VB.net显示外部程序的多个实例,c#,wpf,vb.net,process,count,C#,Wpf,Vb.net,Process,Count,现在我有下面的代码,它应该显示加载时打开的实例数 Class MainWindow Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded Dim processCount As Integer = Process.GetProcessesByName("WinWord").Coun

现在我有下面的代码,它应该显示加载时打开的实例数

Class MainWindow 

    Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
        Dim processCount As Integer = Process.GetProcessesByName("WinWord").Count()

        MessageBox.Show(String.Format("{0} Instances Running", processCount.ToString()))
    End Sub
End Class
但是,如果我用2个Word实例运行程序,它只显示1个。这可能是由于Windows 8/7如何处理实例造成的吗?在任务管理器中,我看到了Microsoft Word 32位2的过程,这对我来说意味着Word的两个实例是打开的,对吗


那么我的代码有什么问题?如果你的例子是C语言,这很好

如果您将WINWORD更改为WINWORD,这可能会对您有所帮助。尝试与.GetProcessByName中的进程名完全匹配。除此之外,Windows可能只在.count调用中返回一个实例。在这种情况下,您可以获取程序名的实例,并将其分配给您自己的count变量以获得所需的结果。

多亏了Denis,下面的代码与其他进程一起工作,以查看有多少个程序实例处于打开状态,但窗口的8似乎只打开WinWord的一个进程并将其置于一个PID之下,即使您打开了多个实例

Class MainWindow 

    Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
        Dim processCount As Integer = Process.GetProcessesByName("WinWord").Count()

        MessageBox.Show(String.Format("{0} Instances Running", processCount.ToString()))
    End Sub
End Class

我甚至尝试了这个Dim实例作为Process=Process.getProcessByNameWinWord,每个实例作为System.Diagnostics.Process In InstanceCount=+1 Next。其中,如果我有2个WinWord实例,它仍然只显示1个。TextBlock1.Text=InstanceCountI运行了您的代码/方案,没有遇到问题。我得到2个,甚至是计时,在运行时启动一个新进程,getProcessByName肯定会重新查询当前正在运行的进程。您的代码的其余部分是否还有其他操作,或者是否包含了可能导致此类行为的内容?嗯,没有。只是从加载事件运行它。请参阅上面更新的代码。我正在运行Windows8。这可能是原因吗。让我试着运行其他程序,看看我看到了多少实例。我在Server2008上运行了你的代码,可能win8有点怪怪的!很奇怪你得到的是哪个WINWORD的实例进程id。我上传了任务管理器的屏幕截图。看看我发现了什么。。两个独立的putty实例,带有2个PID,一个WinWord实例,旁边有2个PID和1个PID。