この回答に触発されて、いくつかの小さな変更を加えました。コード自体から -commandThe storage control block address is invalid
を実行しようとすると、エラー コード 9 ( ) が表示されるため、100% 管理された状態で実行することはできません。rd
私の小さなテストセットアップでは、基本機能は目がくらむほど高速ですが、「よろしいですか?」プロンプト、間違ったパスを指定するとかなり危険なので、先に進むときはヘルメットを着用してください。
任意のコマンド シェルで実行するecho Y | rd /S c:\Temp\test
と、C:\Temp\Test とその下にあるものは警告なしで非常に迅速に削除されます。
ただし、このソリューションをコードで直接実行しても機能しません。したがって、私の簡単な修正は、DeleteTest.bat
この行のみを含むバット ファイル (と呼ばれる) をマシンに配置し、WMI によってバット ファイルを実行することです。
私の小さなテストでは、約 200 mb の合計 900 個のファイルを 1 秒程度で削除します。
また、引用された回答に加えて、リターンコードを取得するため、完全なコードは次のようになります。
var processToRun = new[] { "c:\\Temp\\DeleteTest.bat" };
var connection = new ConnectionOptions();
connection.Username = "me";
connection.Password = "password";
var wmiScope = new ManagementScope(String.Format("\\\\{0}\\root\\cimv2", "MyRemoteMachine"), connection);
var wmiProcess = new ManagementClass(wmiScope, new ManagementPath("Win32_Process"), new ObjectGetOptions());
var result = wmiProcess.InvokeMethod("Create", processToRun);
Console.WriteLine(
"Creation of process returned: " + result);
もちろん、bat ファイルを (コードによって、または事前に生成して) 生成し、コピー先にコピーする必要もありますが、それは些細なことです。