C# 进程。在Windows\System32文件夹中启动

C# 进程。在Windows\System32文件夹中启动,c#,C#,试图以管理员身份启动System32中的文件,但它一直告诉我该文件不存在 错误:系统找不到指定的文件 构建的目标平台是:x86。 当前操作系统:Windows 8.1 x64。对于32位和64位操作系统,我不希望有两个不同的.exe p.StartInfo.Verb = "runas"; p.StartInfo.FileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System),"Defr

试图以管理员身份启动System32中的文件,但它一直告诉我该文件不存在

错误:系统找不到指定的文件 构建的目标平台是:x86。 当前操作系统:Windows 8.1 x64。对于32位和64位操作系统,我不希望有两个不同的.exe

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");
更新


将应用程序从x86切换到任何CPU已更正问题

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

出于测试目的,我建议做一些简单一点的事情 i、 e Process.Start(@“C:\Windows\System32\defrag.exe”)

然后,您可以使用其他变量根据系统架构构建路径:

字符串processPath=Environment.Is64BitOperatingSystem
? Combine(Environment.GetFolderPath(Environment.SpecialFolder.SystemX86),“Defrag.exe”)
:Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System),“Defrag.exe”)

使用环境.SystemDirectory

string filePath = Path.Combine(Environment.SystemDirectory, "defrag.exe");

请(始终)显示完整的异常(例如ToString())。您是否运行在64位版本的Windows 7/8上?如果是这样,请尝试从任何CPU将构建目标设置为64位。Windows使用sysnative进行了一些奇怪的混乱处理。有些我们“认为”在System32中的文件不是,因为Windows不知道我们指的是哪个版本的文件。系统本机或备用。如果从bin\Debug(或bin\Release)文件夹运行.exe并右键单击->“以管理员身份运行”,会发生什么情况…我想这可能是权限问题?@SeanThoman仍然找不到文件和动词runas,应该以管理员的身份启动defrag.exe。@DarkBobG当前的操作系统是8 x64,但构建设置为x86,因为我希望如此,所以我没有x86和x64的构建。路径确实已经指向System32,其中defrag.exe位于其中。应用程序版本设置为x86。