Windows \ System32文件夹中的Process.Start

问题描述:

试图以管理员身份启动位于System32中的文件,但它一直告诉我它不存在。Windows System32文件夹中的Process.Start

错误:系统找不到指定的文件 构建目标平台是:x86。 当前操作系统:Windows 8.1 x64。我宁愿没有2个不同的.exes为32和64位操作系统。

p.StartInfo.Verb = "runas"; 
p.StartInfo.FileName = 
    Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System),"Defrag.exe"); 
    //above points to c:\windows\system32\defrag.exe 
p.StartInfo.Arguments = @"c:\ /A"; 
p.Start(); 
p.WaitForExit(); 

我自己也尝试没有运气以下

p.StartInfo.FileName = 
    Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "sysnative", "Defrag.exe"); 

更新

交换的应用程序从86到任何CPU修正了该问题

+0

请(总是)显示完整的异常(ex.ToString())。 – usr

+0

你有没有机会在64位版本的Windows 7/8上运行?如果是这样,请尝试将来自任何CPU的构建目标设置为64位。 Windows在使用sysnative时会做一些奇怪的事情。我们“认为”在System32中的某些文件不是,因为Windows不知道我们的文件是哪个版本。系统性,或备用。 –

+0

如果从bin \ Debug(或bin \ Release)文件夹中运行.exe,并右键单击 - >“以管理员身份运行”,会发生什么情况。我想也许这是一个权限问题? –

我的猜测是,您正在64位机器上运行此代码。如果我没有记错,Environment.SpecialFolder.System变量会在64位机器上返回C:\ Windows \ SysWOW64。快速搜索SysWOW64文件夹,并且该错误消息是正确的,因为该文件夹中不存在“Defrag.exe”。

然后你可以用其他变量来构建基于路径:

出于测试目的,我会 即的Process.Start(“\ Windows \ System32下\ DEFRAG.EXE C” @)建议的东西有点简单在系统架构上:
String processPath = Environment.Is64BitOperatingSystem ? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.SystemX86), "Defrag.exe") : Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "Defrag.exe")

+0

路径确实已经指向了Defrag.exe所在的System32。应用程序构建设置为x86。 – Tsukasa