-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();                

问题是,如果我在命令提示符中运行命令;它会在几秒钟内安装驱动程序,但如果我在 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”循环之外。添加一个运行驱动程序安装程序的 WHILE 循环,其中嵌入了 for 循环。

这可能会解决您的问题。您走在正确的轨道上,只需考虑稍微调整一下即可。正如 Alvin 和其他一些人所说,您的 COMMAND 只被处理了 3 毫秒,然后它被关闭并重新启动;最多300000次。东西只需要四处移动。

于 2012-08-02T18:53:06.647 回答