【问题标题】:C# Cannot start a system EXE processC#无法启动系统EXE进程
【发布时间】:2012-11-24 05:22:40
【问题描述】:

我有这个代码:

 Process myProcess = new Process();

 myProcess.StartInfo.UseShellExecute = true;
 myProcess.StartInfo.FileName = "rdpclip.exe";
 myProcess.Start();

启动一个位于 system32 中的 exe 文件

我总是得到一个错误,找不到系统文件。在 Windows 2008 服务器中。

即使我设置了 StartupInfo.FileName="c:\\windows\\system32\\rdpclip.exe" 它仍然找不到文件!?

如果我将文件放在其他文件夹中,它可以工作,但在 System32 中它不会启动。我只需要杀死这个进程并重新开始,但我从来没有想过在C#中做这么简单的事情会这么痛苦?!

【问题讨论】:

  • 您的应用程序是 32 位的吗?你的操作系统是 64 位的吗?我注意到 rdpclip.exe 在 C:\windows\system32 但不在 c:\windows\syswow64 (这是作为 32 位应用程序运行时映射到 system32 的文件夹)。
  • 它是 64 位操作系统,但 rdpclip.exe 在 system32 文件夹中。

标签: c# windows process


【解决方案1】:

此错误具有误导性,因为它通常意味着您没有对该文件夹的权限。尝试构建您的程序,然后右键单击生成的 .exe 并单击“以管理员身份运行”。

【讨论】:

    【解决方案2】:

    试试这个(你需要导入 System.Runtime.InteropServices):

    [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);
    
    IntPtr ptr = IntPtr.Zero;
    if(Wow64DisableWow64FsRedirection(ref ptr))
    {
        Process myProcess = new Process();
        myProcess.StartInfo.UseShellExecute = true;
        myProcess.StartInfo.FileName = "rdpclip.exe";
        myProcess.Start();
        Process.Start(myProcess);
        Wow64RevertWow64FsRedirection(ptr);    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-03
      • 2011-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-23
      • 2021-06-13
      相关资源
      最近更新 更多