首页 > 其他分享 >Process.Start找不到指定文件的说明

Process.Start找不到指定文件的说明

时间:2024-03-05 16:59:19浏览次数:35  
标签:exe Process 指定 Start osk Windows var ptr

最近在触屏Win10中需要调用osk.exe 显示虚拟键盘,其路径为:C:\Windows\System32\osk.exe。由于软件是32位的,在使用Process.Start方法时系统默认启用了文件系统重定向,将其指向路径:C:\Windows\SysWoW64\osk.exe,造成找不到文件。

1、解决方法1:设置文件系统重定向

参考:C# 通过Process.Start(@“C:\Windows\System32\osk.exe“)调用系统软键盘,提示无法找到文件路径解决方法

解决思路是:先禁用调用线程的文件系统重定向,然后还原调用线程的文件系统重定向。这涉及到Win32中的API—Wow64DisableWow64FsRedirection、Wow64RevertWow64FsRedirection。

1.1 Wow64DisableWow64FsRedirection

微软对该方法的说明如下所示:

1.2 Wow64RevertWow64FsRedirection

微软对该方法的说明如下所示:

1.3 代码示例

[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);

[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);

private static void OpenVirtualKeyboard()
{
    //判断软键盘是否进程是否已经存在,如果不存在进行调用
    var processArray = Process.GetProcessesByName("osk");
    if (processArray.Any())
    {
        return;
    }

    try
    {
        var ptr = new IntPtr();
        var isWow64FsRedirectionDisabled = Wow64DisableWow64FsRedirection(ref ptr);
        if (isWow64FsRedirectionDisabled)
        {
            Process.Start(@"C:\Windows\System32\osk.exe");
            var isWow64FsRedirectionReverted = Wow64RevertWow64FsRedirection(ptr);
        }
    }
    catch (Exception e)
    {
        //异常处理
    }
}

2、解决方法2:使用sysnative

参考:Process.Start(@"C:\Windows\System32\osk.exe") 找不到指定文件

使用C:\Windows\sysnative\osk.exe代替C:\Windows\System32\osk.exe,可以在32位应用的代码里面访问64位应用。

示例代码:

private static void OpenVirtualKeyboard()
{
    //判断软键盘是否进程是否已经存在,如果不存在进行调用
    var processArray = Process.GetProcessesByName("osk");
    if (processArray.Any())
    {
        return;
    }

    try
    {
        var ptr = new IntPtr();
        var isWow64FsRedirectionDisabled = Wow64DisableWow64FsRedirection(ref ptr);
        if (isWow64FsRedirectionDisabled)
        {
            Process.Start(@"C:\Windows\sysnative\osk.exe");
            var isWow64FsRedirectionReverted = Wow64RevertWow64FsRedirection(ptr);
        }
    }
    catch (Exception e)
    {
        //异常处理
    }
}

标签:exe,Process,指定,Start,osk,Windows,var,ptr
From: https://www.cnblogs.com/xhubobo/p/18054358

相关文章

  • 在PowerShell中下载文件是一项常见的任务,可以通过多种方法完成。下面我将介绍使用Invo
    在PowerShell中下载文件是一项常见的任务,可以通过多种方法完成。下面我将介绍使用Invoke-WebRequest、New-Object和Start-BitsTransfer命令来下载文件的方法。使用Invoke-WebRequestInvoke-WebRequest是一个非常强大的命令,用于向网页发送HTTP和HTTPS请求。你可以使用它来下载文......
  • BeanShell PostProcessor 后置处理器1
    一概念:作用类似于后置处理器,其中的ctx、vars、props、prev、log都和BeanShellSampler一样一样![image.png](https://fynotefile.oss-cn-zhangjiakou.aliyuncs.com/fynote/fyfile/16194/1663307082040/f1a46708c4ae40229e892abaf6985a72.png)重点解释前面没有的:**data:......
  • BeanShell PostProcessor 后置处理器
    一主要作用:   BeanShellPostProcessor主要用来提取响应数据,对数据做处理分析的。二概念:  作用类似于后置处理器,其中的ctx、vars、props、prev、log都和BeanShellSampler一样一样  ![image.png](https://fynotefile.oss-cn-zhangjiakou.aliyuncs.com/fynote......
  • Windows定时删除指定路径下N天前的文件以及文件夹
    Windows定时删除指定路径下N天前的文件以及文件夹 将下面代码复制到自建的.txt文件里,然后保存再更改后辍名为.bat,点击执行即可脚本文件存放随意,因为里面的路径是绝对路径1.删除指定路径下5天前的所有文件@echooffsetSrcDir=E:\WORK\GitsetDaysAgo=5forfiles/p......
  • python将图片按照指定尺寸比例压缩
            fromPILimportImagedefcompress_image(input_image_path,output_image_path,target_width,target_height):"""压缩图片到指定尺寸。:paraminput_image_path:原始图片的路径:paramoutput_image_path:压缩后图片的保......
  • NGINX 配置404错误页面跳转指定页面
    主要是记录踩过的一个坑。。。nginx要自定义404和401的页面,但是error_page配置没有生效,没有正常跳转。 error_page404 /404.html;error_page404=http://www.test.com/error.html;http://tengine.taobao.org/nginx_docs/cn/docs/http/ngx_http_core_module.html#error_......
  • PowerShell 中,您可以通过远程控制执行多条命令。最常见的方法是使用 Invoke-Command
    PowerShell中,您可以通过远程控制执行多条命令。最常见的方法是使用Invoke-Command命令,它允许您在远程计算机上执行指定的命令或脚本块。以下是一种执行多条命令的示例:powershellCopyCodeInvoke-Command-ComputerName"远程计算机名"-ScriptBlock{#在这里可以放置要......
  • 在K8S中,如何在指定节点上部署Pod呢?
    在Kubernetes(K8s)中,要在指定节点上部署Pod,可以使用两种方法:方法一:使用nodeName字段明确指定在Pod的YAML定义中,可以直接在.spec.nodeName字段指定目标节点的名称。这样,Pod将会被调度到指定的节点上。示例YAML配置:apiVersion:v1kind:Podmetadata:name:my-pod-on-specif......
  • mainCRTStartup 函数解析
    mainCRTStartup函数解析 操作系统装载应用程序后,做完初始化工作就转到程序的入口点执行。程序的默认入口点由连接程序设置,不同的连接器选择的入口函数也不尽相同。在VC++下,连接器对控制台程序设置的入口函数是mainCRTStartup,mainCRTStartup再调用main函数 mainCRTStartu......
  • 如何用压缩工具对指定文件进行备份保存
    使用场景:当你的程序文件需要每日自动备份时 脚本文件:新建记事本文件,重命名为bak.bat@echooff::设置7z的命令行程序路径setzip7=D:\\7-Zip\\7z.exe::设置压缩包保存路径setSave=E:\\datebak::当天日期,备份文件名setcurdate=%date:~0,4%-%date:~5,2%-%date:~8,2%::......