我在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();
答案 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)
不确定这些是否是您问题的原因,但是从问题中发布的示例中,请注意以下几点:
在上面的例子中,我认为它实际上看起来像指定文件名和workdirectory重复导致找不到文件。 See this link I used to check和this 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();