【问题标题】:Having issue with displaying processes in combobox在组合框中显示进程时遇到问题
【发布时间】:2012-11-07 20:25:53
【问题描述】:

在我的应用程序中,用户单击一个按钮,然后加载一个表单,在此表单中,有一个组合框可以生成一个窗口进程列表并显示窗口名称。

它在 Visual Studio 中总是可以正常工作,尽管当我启动编译版本时,我总是收到此错误“找不到进程 {0}。

我认为这意味着它没有要读取的进程,所以我添加了一些代码,仅在数量大于或等于 1 时才显示,但它没有帮助。

有人看到我的问题吗?

     Dim ProcessList() As Process = Process.GetProcesses
    If ProcessList.Count() >= 1 Then
        For I = 0 To UBound(ProcessList)
            If ProcessList(I).MainWindowTitle.ToString = "" = False Then
                ComboBox1.Items.Add(ProcessList(I).MainWindowTitle.ToString)
            End If


        Next
    Else
        ComboBox1.Items.Add("No windows found")
    End If

【问题讨论】:

  • 尝试以管理员身份运行
  • 如果您查看开发环境中的流程,它们是您的应用程序还是 Visual Studio?

标签: .net vb.net visual-studio-2010 process


【解决方案1】:

我无法复制您的问题,我已经在 Visual Studio 中运行您的代码并且没有错误,并且从可执行文件中运行没有错误。在在线查找错误时,它不是描述性的,表明该过程无法访问该功能。你可以尝试添加一些额外的检查,如果你有 Visual Studio Professional 或更高版本,你可以将attach Visual Studio 添加到你的可执行文件中,并以这种方式解决你的错误。这是我用来测试的代码。

Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim ProcessList() As Process = Process.GetProcesses
        If ProcessList.Count() >= 1 Then
            For Each p As Process In ProcessList
               If Not IsNothing(p) Then
                    If Not String.IsNullOrEmpty(p.MainWindowTitle) Then
                        ComboBox1.Items.Add(p.MainWindowTitle.ToString)
                    End If
                End If
            Next
        Else
            ComboBox1.Items.Add("No windows found")
        End If
    End Sub

    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        Dim ProcessList() As Process = Process.GetProcesses
        If ProcessList.Count() >= 1 Then
            For Each p As Process In ProcessList
                If Not IsNothing(p) Then
                    ComboBox1.Items.Add(p.ProcessName)
                End If
            Next
        Else
            ComboBox1.Items.Add("No windows found")
        End If
    End Sub
End Class

【讨论】:

    【解决方案2】:

    改变这一行:

    For I = 0 To UBound(ProcessList)
    

    收件人:

    For I = LBound(ProcessList) To UBound(ProcessList)
    

    在 VB 中,一些数组从 1 开始

    【讨论】:

    • 自 VB6 以来没有,System.Diagnostics.GetProcesses 返回的任何集合都将从零开始
    • 对不起,我不在家,所以我还没试过。马克你知道为什么它不起作用吗?就像我说的那样,它只发生在编译的调试/发布副本中。
    • @user1632018 我的第一个猜测是权限问题,尝试右键单击您的 exe 并以管理员身份运行
    • 您好,谢谢您的回复。我回家后会尝试,唯一的问题是当我将我的软件分发给必须让他们以管理员身份运行的人时可能是个问题,如果需要,我能否在应用程序中编写代码,让它自动提示用户以管理员身份运行。
    • @user1632018 是的,您可以,看看这是否真的是问题所在,查看 GetProcesses 文档,看看它是否说明了需要哪些权限。我正在旅行,在我的 iPhone 上我今晚安顿下来后会调查一下
    猜你喜欢
    • 2021-03-25
    • 2013-03-04
    • 2021-08-31
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 2013-05-20
    相关资源
    最近更新 更多