如何 运行 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();
}
我开发了一个 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();
}