-2

C#のWindowsアプリケーションでcmdコマンドを実行しようとしています。私のコードは、

    progressBar1.Show();
    progressBar1.Minimum = 0;
    progressBar1.Maximum = 100;
    progressBar1.Step = 1;

    ProcessStartInfo ProcessInfo; 
    Process Process;

    for (int i = 0; i < 300000; i++)
    {
        progressBar1.PerformStep();
        int percent = (int)(((double)progressBar1.Value/(double)progressBar1.Maximum) * 100);
        progressBar1.CreateGraphics().DrawString(percent.ToString() + "%", new Font("Arial",(float)7.02,FontStyle.Regular),Brushes.Black, new Point(progressBar1.Width / 2 - 10, progressBar1.Height / 2 -7));

        ProcessInfo = new ProcessStartInfo(command);
        ProcessInfo.RedirectStandardOutput = true;
        ProcessInfo.CreateNoWindow = true;
        ProcessInfo.UseShellExecute = false;

        Process = Process.Start(ProcessInfo);                    

        Process.Close();                    
    }
    progressBar1.Hide();                

問題は、コマンドpromtでコマンドを実行した場合です。数秒でドライバーがインストールされますが、C#でコマンドを実行すると機能しません。

誰かが私を説明できますか、私が欠けているコードはありますか?

コマンドは

ExecuteCommand("\"C:\\Disk1.Win7\\setup.exe\" /s /f1\"C:\\Disk1.Win7\\setup_install.iss\" /a\"C:\\Disk1.Win7\\OposData.reg\""); 
4

2 に答える 2

0

このコマンドを一度起動してから閉じないプログラムを作成することから始めますが、ユーザーの入力を待ってそこに座っています。

これが機能した後、バックグラウンドワーカーに似たものを使用して、コードに応答性と構造を追加することを検討してください。HasExitedプロパティを使用して、プロセスの存続期間を監視できます。

次に、パスとファイル名をハードコーディングする代わりに、FileInfoクラスとDirectoryInfoクラスを使用して引数を指定することを検討してください。

于 2012-08-02T18:50:23.457 に答える
0

COMAMNDを実行するためのコードを移動することを検討してください。

ProcessInfo = new ProcessStartInfo(command);
    ProcessInfo.RedirectStandardOutput = true;
    ProcessInfo.CreateNoWindow = true;
    ProcessInfo.UseShellExecute = false;

    Process = Process.Start(ProcessInfo);                    

    Process.Close(); 

その「for」ループの外側。forループが埋め込まれた、ドライバーインストーラーを実行するWHILEループを追加します。

これで問題が解決する場合があります。あなたは正しい方向に進んでいます。少し違った方法で物事を調整することを検討してください。Alvinと他の数人が述べたように、COMMANDは、シャットダウンされて再開される前に、3ミリ秒間しか処理されていません。最大300000回まで。物事はただ動き回る必要があります。

于 2012-08-02T18:53:06.647 に答える