为什么我无法从WPF运行截图工具?

时间:2012-07-31 17:20:09

标签: c# wpf

我创建了一个带有很多按钮的WPF窗口,每个窗口都运行不同的程序。例如,要运行MS Word,我使用了:

System.Diagnostics.Process.Start("C:\\Program Files (x86)\\Microsoft Office\\Office14\\WINWORD.EXE");

但是当我尝试以不同的方式运行Windows 7 Snipping Tool时。应该是这样的:

System.Diagnostics.Process.Start("C:\\Windows\\System32\\SnippingTool.exe");

我确定路径是正确的,但总是会显示一条消息,说明找不到该文件。我想知道为什么会这样。

重要提示:我使用Windows 7 64位。

3 个答案:

答案 0 :(得分:10)

使用此:

// if the build platform of this app is x86 use C:\windows\sysnative
if(!Environment.Is64BitProcess) 
   System.Diagnostics.Process.Start("C:\\Windows\\sysnative\\SnippingTool.exe");
else
   System.Diagnostics.Process.Start("C:\\Windows\\system32\\SnippingTool.exe");

问题在于您的构建平台(x86)以及64位操作系统上文件夹C:\Windows\System32\的自动重定向。

基本上,由于多种原因,在vista / windows 7 64位操作系统中,当32位应用程序尝试访问C:\Windows\System32\时,它会自动重定向到名为C:\Windows\SysWOW64\的文件夹。因此,您无法启动snippingtool.exe,因为它不在该文件夹中。

唯一的方法是使用C:\Windows\sysnative\并绕过重定向。

答案 1 :(得分:3)

我的通灵调试器告诉我你在64位版本上运行32位程序 Windows,因此您对%WINDIR%C:\Windows)的来电实际上正在重新路由到C:\Windows\SysWOW64

使用环境变量而不是硬编码路径到可能移动的目录,具体取决于环境和/或Windows版本。

答案 2 :(得分:2)

您应该使用环境变量。可能你是在64位系统上运行它,而C:\Windows\System32\正在被重定向。