system32应用程序的Process.Start - 系统无法找到指定的文件

时间:2015-03-19 16:03:39

标签: c# .net process windows-8.1 system32

我在WPF中为Windows 8.1系统编写了一个简单的自定义shell应用程序。它运行正常,但我需要在注册表的Run部分启动一些应用程序。但是,无论我尝试什么,他们都不会启动,我会收到错误:"系统无法找到指定的文件。"

这是专为64位系统设计的,所以我听说使用C:\ Windows \ Sysnative \作为路径而不是C:\ Windows \ System32 \是一个修复,但它并没有工作。我的代码如下:

Process processToStart = new Process 
{ 
    StartInfo = 
    { 
        FileName = @"C:\Windows\Sysnative\hkcmd.exe", 
        WorkingDirectory = @"C:\Windows\Sysnative\") 
    }
};
processToStart.Start();

2 个答案:

答案 0 :(得分:2)

我发现让它工作的方法是禁用WOW64文件系统重定向。似乎没有其他工作。
从这个链接: http://tcamilli.blogspot.co.uk/2005/07/disabling-wow64-file-system.html

[DllImport("Kernel32.Dll", EntryPoint="Wow64EnableWow64FsRedirection")]
public static extern bool EnableWow64FSRedirection(bool enable);

Wow64Interop.EnableWow64FSRedirection(false)
Process processToStart = new Process 
{ 
    StartInfo = 
    { 
        FileName = @"C:\Windows\Sysnative\hkcmd.exe", 
        WorkingDirectory = @"C:\Windows\Sysnative\") 
    }
};
processToStart.Start();
Wow64Interop.EnableWow64FSRedirection(true)

答案 1 :(得分:0)

不确定这些是否是您问题的原因,但是从问题中发布的示例中,请注意以下几点:

  1. StartInfo.FileName应该只包含fileName,而不是路径。
  2. 如果您尝试执行hkcmd.exe,则将其写为hkcmnd.exe(额外N)。
  3. 在上面的例子中,我认为它实际上看起来像指定文件名和workdirectory重复导致找不到文件。 See this link I used to checkthis link as well

    我的机器上没有Sysnative(Win 7 x64),它可能在Windows 8中。

    我无法执行hkcmd.exe,它也引发了错误,但执行cmd.exe和notepad.exe没问题。

    示例代码:

    System.Diagnostics.Process processToStart = new System.Diagnostics.Process();
    processToStart.StartInfo.FileName = "cmd.exe"; //or notepad.exe
    processToStart.StartInfo.WorkingDirectory = @"C:\Windows\System32\";
    processToStart.Start();