Windows.System32文件夹中的Process.Start

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

错误:系统找不到指定的文件Build Target Platform是:x86。 当前操作系统:Windows 8.1 x64。 对于32位和64位操作系统,我宁愿没有2个不同的.exes。

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”。

出于测试目的,我建议稍微简单一点,即Process.Start(@“C:\ Windows \ System32 \ defrag.exe”)

然后,您可以使用其他变量来构建基于系统体系结构的路径:
String processPath = Environment.Is64BitOperatingSystem ? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.SystemX86), "Defrag.exe") : Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "Defrag.exe")

使用Environment.SystemDirectory

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