1

我目前有以下代码在单击“运行”按钮时运行外部虚拟应用程序(使用 Cameyo 创建)。我还有一个计时器,它每秒检查一下进程(虚拟 exe 程序)是否仍然打开。理论上 GetProcessByName 应该找到任务管理器中列出的程序对吗?然而事实并非如此!我什至尝试使用 GetProcessByName 来终止进程(单击另一个按钮),但进程没有被终止。

难道是因为我虚拟化了我想GetProcessByName识别的程序?因此任务管理器中的任务名称不正确?例子

程序启动:SmartDefrag.virtual.exe

它运行任务管理器将其显示为 SmartDefrag.exe 如果进程 SmartDefrag.exe 正在运行,请使用 GetProcessByName("SmartDefrag.exe") 禁用运行按钮。

不禁用运行按钮。

我可以使用 TITLE OF PROCESS 吗?或者每次进程打开时 PID 是否相同?还有其他选择吗?

代码:

Private Sub SMDFRunAppMainButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles SMDFRunAppMainButton.Click
' LoadingSMDFMainButton.Visibility = Windows.Visibility.Visible
Dim downloadlocation As String = (currentpath & "\1stAidApps\SMDF\SmartDefrag.virtual.exe")
My.Settings.FileLoad = downloadlocation
    Try 'Errors on Cancel

        dp1Timer = New DispatcherTimer
        dp1Timer.Interval = TimeSpan.FromMilliseconds(1000)
        AddHandler dp1Timer.Tick, AddressOf TickMe1
        dp1Timer.Start()

        fileload = My.Settings.FileLoad

        Process.Start(fileload)
    Catch ex As Exception
        MessageBox.Show("Failed to launch. Please try again.", "Launch Failed")

    End Try
End Sub

Private Sub TickMe1()
    Dim p() As Process

    p = Process.GetProcessesByName("SmartDefrag.exe")

    If p.Count > 0 Then
        LoadingSMDFMainButton.Visibility = Windows.Visibility.Hidden

        SMDFRunAppMainButton.IsEnabled = False
    Else
        SMDFRunAppMainButton.IsEnabled = True
    End If

End Sub
4

1 回答 1

1

GetProcessByName 不采用完整路径,而是采用进程的“名称”。这可能需要GetProcessByName("SmartDefrag")

文档中GetProcessByName

进程名称是进程的友好名称,例如 Outlook,不包括 .exe 扩展名或路径。

于 2013-06-05T16:29:09.513 回答