【发布时间】:2022-10-19 04:31:01
【问题描述】:
我正在尝试以编程方式杀死 Osk.exe 的实例。
我有一个对话框,允许用户使用按钮启动 osk,如果他们不自己关闭它,我会通过关闭形式的代码关闭它。
我的代码在创建和关闭时看起来像这样。
Public Sub ClavierCommandExecute()
Dim path64 = "C:\Windows\winsxs\amd64_microsoft-windows-osk_31bf3856ad364e35_10.0.19041.1_none_60ade0eff94c37fc\osk.exe"
Dim path32 = "C:\windows\system32\osk.exe"
Dim Path = If(Environment.Is64BitOperatingSystem, path64, path32)
Me.ProcessusClavier = Process.Start(Path)
End Sub
Public Sub FermerCommandExecute()
Dim processOSK = Process.GetProcessesByName("osk")
For Each proc In processOSK
proc.Kill()
Next
Me.Close()
End Sub
问题是,如果我这样做,osk 进程将继续在后台运行。我可以告诉它,因为当我锁定我的笔记本电脑时,它会打开 osk。如果它可以帮助我仍然在 Windows 10 64 位。
但是,如果我使用关闭按钮甚至通过任务管理器手动关闭它,一切正常。
通常这不会是一个问题,但我觉得它没有被正确杀死而造成了内存泄漏。
【问题讨论】:
-
检查
Process.GetProcessesByName("osk")的返回值是多少。很可能进程名称是错误的,而您的for each什么也不做。 -
感谢 Alejandro,实际上 GetProcessesByName 工作正常。我得到了 1 个名为 osk 的进程,它进入了循环。我的信念是,它附加了另一个过程,称为其他过程,我不会杀死它。或者64位的osk不能以这种方式被杀死。
-
可能总是程序从其他文件启动另一个进程,或者您没有权限杀死它(如果您提升
osk,可能会发生这种情况,您也需要提升才能杀死它,例如) . 64位与否在这里无关紧要。 -
感谢亚历杭德罗的回答。我想朝那个方向挖掘,但我在那个主题上没有受过良好的教育。你能给我指出一些关于这方面的资源,这样我就可以在我身边尝试一些东西吗?感谢您的时间。
标签: 64-bit kill-process on-screen-keyboard