Osk.exe 未正确终止并继续在后台工作

问题描述 投票:0回答:2

我正在尝试以编程方式杀死 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 进程会继续在后台运行。我可以这么说,因为当我锁定笔记本电脑时,它会重新打开操作系统。如果它可以帮助我仍然使用 Windows 10 64 位。

但是如果我使用关闭按钮甚至通过任务管理器手动关闭它,一切都会正常工作。

通常这不会是一个问题,但我觉得它由于没有被正确杀死而造成了内存泄漏。

64-bit kill-process on-screen-keyboard
2个回答
1
投票

好吧,问题来自于我需要成为管理员才能正确杀死 OSK.exe。

我替换了简单的processOSK.kill() 通过该代码,我可以以管理员身份通过任务杀死它。

        Dim process As System.Diagnostics.Process = New System.Diagnostics.Process()
        Dim startInfo As System.Diagnostics.ProcessStartInfo = New System.Diagnostics.ProcessStartInfo()
        startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden
        startInfo.FileName = "taskkill.exe"
        startInfo.Arguments = "/im osk.exe"
        startInfo.Verb = "runas"
        process.StartInfo = startInfo
        process.Start()

0
投票

您可以使用以下代码关闭屏幕键盘:

    public static void HideOnScreenKeyboard()
    {
        foreach (System.Diagnostics.Process process in System.Diagnostics.Process.GetProcessesByName("osk"))
        {
            process.Kill();
        }
    }
   
© www.soinside.com 2019 - 2024. All rights reserved.