3

ネットワーク上のすべてのマシンをデフラグするユーティリティを作成しようとしています。WMIのDefragメソッドとDefragAnalysisメソッドを使用して成功しましたが、WindowsXPとの互換性はありません。ネットワーク上にいくつかの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
    }
4

2 に答える 2

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
                }
于 2012-11-01T12:16:11.083 に答える
1

おそらく、PsExecを使用してコマンドをリモートで実行します。これは、ほとんどすべてのWindows(NT)バージョンで機能するはずです。

于 2012-10-31T12:37:07.273 に答える