我正在尝试创建一个实用程序来整理网络上的所有计算机。我使用WMI的Defrag和DefragAnalysis方法取得了成功,但它们与Windows XP不兼容。这是一个问题,因为我们在网络上有一些XP机器。 我已经能够在XP机器上本地调用defrag.exe进程来执行碎片整理但是我在远程机器上调用它时遇到问题。下面是我在本地工作的代码,有人可以帮助我为我网络上的远程机器做这项工作吗?我曾尝试使用一些WMI来帮助,但由于我是C#和WMI的新手,我没有成功,谢谢!
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = "defrag";
info.Arguments = volume + " -f";
info.UseShellExecute = false;
info.CreateNoWindow = true;
info.RedirectStandardOutput = true;
Process defrag = Process.Start(info);
defrag.PriorityClass = ProcessPriorityClass.BelowNormal;
while (!defrag.HasExited)
{
System.Threading.Thread.Sleep(1000);
Process[] procs = Process.GetProcessesByName("dfrgntfs");
if (procs != null && procs.Length > 0)
{
procs[0].PriorityClass = ProcessPriorityClass.Idle;
defrag.WaitForExit();
}
result = null;
while(!defrag.StandardOutput.EndOfStream)
{
//get output and store results
}
答案 0 :(得分:2)
只是为了完成这个线程,我想我会发布实际上适用于我的代码,为了使这个代码工作,你必须下载PsTools并将它放在根目录中......
Process psexec = new Process();
psexec.StartInfo.FileName = @"C:\PsExec.exe";
psexec.StartInfo.Arguments = @"-s \\" + machine + " defrag.exe " + volume + " -f";
psexec.StartInfo.UseShellExecute = false;
psexec.StartInfo.CreateNoWindow = true;
psexec.StartInfo.RedirectStandardOutput = true;
psexec.Start();
while (!psexec.HasExited)
{
System.Threading.Thread.Sleep(1000);
Process[] procs = Process.GetProcessesByName("dfrgntfs", @"\\" + machine);
if (procs != null && procs.Length > 0)
{
psexec.WaitForExit();
}
while (!psexec.StandardOutput.EndOfStream)
{
//get output and store results
}
答案 1 :(得分:1)
我可能只是使用PsExec远程运行命令。这适用于几乎任何Windows(NT)版本。