即使重命名了程序文件名,也要杀死程序的所有旧实例

时间:2015-01-24 04:41:55

标签: vb.net

我有一个名为Test的项目,它是一个带有1个按钮的表单。我想这样做,以便当我点击按钮时它会杀死它的所有旧实例。

所以这就是我所做的:

Private Sub removeOldInstances()
        'gets all processes with the same name as the project.
        Dim oldProcess() As Process = Process.GetProcessesByName("Test")
        Dim currentProcessId As Integer = Process.GetCurrentProcess.Id
        For Each p As Process In oldProcess
            If p.Id <> currentProcessId Then
                p.Kill()
            End If
        Next
    End Sub

我点击了按钮调用。

所以我测试了它,它工作正常。但是,当我将.exe重命名为其他内容并尝试运行它时,会出现问题。所以我可以说我将其重命名为Test1而不是Test。如果我运行它的2个实例,并且如果我单击按钮则从其中一个实例运行它不会杀死它的旧实例。这可能是因为在我的removeOldInstances方法中,它通过名称"Test"获取进程。

我注意到,如果你查看程序的属性,在详细信息选项卡下面会有一个名为original filename的东西。我想也许我可以使用它来获取所有进程,但我该怎么做?

如果有人可以给出暗示或其他方式来做这件事,那将非常感激。

1 个答案:

答案 0 :(得分:1)

原始文件名是“VerInfo”属性,在此过程中不会作为属性出现。在构建应用程序或使用ResHack之类的东西时,您可以将其设置为您想要的任何内容。您需要在磁盘上找到该文件,以便查询该信息。

考虑使用类似命名的互斥锁,其中包含您的应用在启动时创建的进程ID。例如在应用程序启动时,使用“myTestAppNamePid1234”创建一个命名的互斥锁,并在您的进程检查循环中尝试打开具有该名称的互斥锁和您正在循环的PID。