如何 运行 Defrag.exe 在 windows 应用程序 c# 中优化硬盘

How to run Defrag.exe for optimize the harddisk in windows application c#

我开发了一个 windows 应用程序,其中我有一些实现的功能,现在我想实现优化硬盘,所以我了解了 defrag.exe。所以我写了一些代码,但它不是为我工作。任何人都可以做错什么吗?

        Process p = new Process();
        ProcessStartInfo startInfo = new ProcessStartInfo();
        p.StartInfo.Verb = "runas";
        p.StartInfo.FileName =
            Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "Defrag.exe");

        p.StartInfo.Arguments = @"c:\ /A";


        try
        {
            p.Start();
           p.WaitForExit();
         string a=  p.StandardOutput.ToString(); 

请参阅我对您之前 post 的评论。除此之外,您需要设置一些额外的参数 - 下面的工作示例。您可能还需要提升权限才能使您的场景正常工作。如果是这种情况,请参阅 this post

 static void Main(string[] args)
        {
            Process p = new Process();
            ProcessStartInfo startInfo = new ProcessStartInfo();
            p.StartInfo.Verb = "runas";
            p.StartInfo.FileName =
                Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "Defrag.exe");

            p.StartInfo.Arguments = @"c:\ /A";

            // Additional properties set
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.UseShellExecute = false;
            p.Start();

            // Fixed your request for standard with ReadToEnd
            string result = p.StandardOutput.ReadToEnd();
            p.WaitForExit();
        }

添加另一个选项 - 试试下面的方法。要使用 运行as,您需要设置 StartInfo.UseShellExecute = true,这意味着您无法重定向标准输出 - 这对您仍然有效吗?另一种选择是 运行 你的整个程序作为管理员 How do I force my .NET application to run as administrator? - 这将允许你重定向你的输出并 运行 具有提升的权限。

static void Main(string[] args)
{
      Process p = new Process();
      ProcessStartInfo startInfo = new ProcessStartInfo();
      p.StartInfo.Verb = "runas";
      p.StartInfo.FileName =
                Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "Defrag.exe");

    p.StartInfo.Arguments = @"c:\ /A";

     // Additional properties set
     //p.StartInfo.RedirectStandardOutput = true;
     p.StartInfo.UseShellExecute = true;
     //p.StartInfo.CreateNoWindow = true;
     p.Start();

     // Fixed your request for standard with ReadToEnd
     //string result = p.StandardOutput.ReadToEnd();
     p.WaitForExit();
  }