我正在创建一个需要先决条件的wpf应用程序。如果没有满足这些先决条件,那么我会询问用户他是否愿意安装前提条件:Microsoft Visual C++ 2010 SP1 Redistributable Package。无提示执行进程/程序
因此,如果用户选择安装先决条件,我将执行vcredist_x86.exe(即从我提供的第一个链接下载的文件)。
然后在我的应用程序将能够告诉安装是通过做一些像完成时:
ProcessStartInfo psi = new ProcessStartInfo(@"vcredist_x86.exe");
var p = new Process(); p.StartInfo = psi;
p.Start(); //start the process
p.WaitForExit(); // wait for the installation to finish
// installation should be done now
好一切的伟大工程至今。 问题是我在我的wpf应用程序中有一个进度条,我希望在那里显示进度。
我已经能够这样做,显示安装进度如下:
有一个名为AutoIt,这是伟大的,简单的自动化任务的程序。例如,我可以很容易地通过使用类似的东西检测窗口是否存在自动存储:
然后,我可以编译该脚本并创建一个非常小的可执行文件。 在该可执行文件中,如果指定的窗口存在,则返回1,否则返回0。
当用户移动到下一个窗口时,我的脚本可能会返回2,因为这是一个不同的窗口。 AutoIt还可以查看窗口进度条的进度!所以如果该脚本返回80例如,那么我会例如更新我的进度到80%。
我这样做,这样做是这样的:
// start the autoitExecutable....
// wait for executable to exit usually takes 10 miliseconds it is fast
if (autoitProcess.ExitCode == 1)
{
// do somthing
}else if(autoitProcess.ExitCode == 2)
{
// do something else
} //etc....
正如你可以看到我有执行该脚本每隔1秒,以检测哪些变化,以更新WPF我的进度条已经完成。这一工程,但我每次执行该可执行文件用C#我得到:
光标约500毫秒然后在其上再次出现下一秒。即使没有窗户出现,这变得令人讨厌。如果我能摆脱那个游标并以某种方式默默执行那个可执行文件,那将会很好。当我执行autoit可执行文件时,没有窗口显示,也没有别的。
P.S.
我知道我可以使用c#来检查窗口的存在,也许看到其他窗口的处理程序的值就像autoit能够做到这一点,但它是如此简单,使用AutoIt创建这些程序,它会是如果漂亮,我可以为这种TAKS
对于安装程序项目(prereq检查+安装)免费提供的东西,这看起来像是一大堆努力工作。 – spender 2012-02-14 22:14:48
在你的p.WaitForExit()我知道有一种方法可以在While循环中做到这一点你试过..? – MethodMan 2012-02-14 22:16:20
在另一个线程中将安装关闭,并在显示动画时显示。伪进度条,加仑.. – 2012-02-14 22:20:39