1

私は技術ツールキット プログラムの作成に取り組んでおり、この「ツールキット」に含まれているのは、ローカル ディスクでデフラグを実行するボタンです。現在、このために作成したバッチ ファイルは単純で、基本的な断片化分析を実行するだけです。

defrag C: /A

これをトリガーするボタンの背後にある C# コードは次のとおりです。

System.Diagnostics.ProcessStartInfo procInfo = 
    new System.Diagnostics.ProcessStartInfo();
procInfo.Verb = "runas";
procInfo.FileName = "(My Disk):\\PreDefrag.bat";
System.Diagnostics.Process.Start(procInfo);

このコードはまさに私が望んでいることを実行します。UAC を呼び出してから、管理者特権でバッチ ファイルを起動します。バッチ ファイルを実行すると、コマンド コンソールに次のような出力が表示されます。

C:\Windows\system32>defrag C: /A
'defrag' is not recognized as an internal or external command, 
    operable program or batch file.

このエラーの原因と修正方法を教えてください。

4

2 に答える 2

1

まず第一に:youtプロジェクトのPlatform Targetプロパティをに設定し、オプションのチェックを外します(99,9%これが問題です)。それでは...これができるのに、なぜコマンドを呼び出すバッチを開始するのですか?Any CPUPrefer 32-bit

ProcessStartInfo info = new ProcessStartInfo();
info.Arguments = "/C defrag C: /A";
info.FileName = "cmd.exe";
info.UseShellExecute = false;
info.Verb = "runas";
info.WindowStyle = ProcessWindowStyle.Hidden;

Process.Start(info);

私のマシンではチャームのように機能します。複数のコマンドの場合:

ProcessStartInfo info = new ProcessStartInfo();
info.FileName = "cmd.exe";
info.RedirectStandardInput = true;
info.UseShellExecute = false;

Process cmd = Process.Start(info);

using (StreamWriter sw = p.StandardInput)
{
    if (sw.BaseStream.CanWrite)
    {
        sw.WriteLine(command1);
        sw.WriteLine(command2);
        // ...
于 2013-01-19T04:59:26.777 に答える