Nitesh Sharma
Nitesh Sharma

Reputation: 139

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

I have developed one windows application in which i have some implemented feature now i want to implement optimize hard disk so i got to know about defrag.exe .so i wrote some code but its not working for me. can anyone what am doing wrong ?

        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(); 

Upvotes: 1

Views: 539

Answers (2)

Murray Foxcroft
Murray Foxcroft

Reputation: 13745

Adding another option - try the below. To use runas, you need to set StartInfo.UseShellExecute = true which means you cant redirect the standard output - would this still work for you? Another option is to run your whole program as admin How do I force my .NET application to run as administrator? - this will allow you to redirect your output and run with elevated permissions.

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();
  }

Upvotes: 0

Murray Foxcroft
Murray Foxcroft

Reputation: 13745

See my comment on your previous post. That aside, you need to set a few extra parameters - working sample below. You may also need to elevate privileges in order for your scenario to work. If this is the case, then see 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();
        }

Upvotes: 1

Related Questions