当前位置:编程学习 > C#/ASP.NET >>

如何跟踪C#调用的外部命令执行情况呢?

最近在做一个APK安装器,通过调用Google提供的Adb文件来安装apk文件。

文件在DOS下执行完成后,会返回一个安装成功的字符串。

现在有一个问题。但是安装过程中这个时间不固定。我需要他安装完第一个后继续安装第二个文件。我怎么才能跟踪这个结果呢?

附代码

                System.Diagnostics.Process InstallApk = new System.Diagnostics.Process();
                InstallApk.StartInfo.FileName = "cmd.exe";

                InstallApk.StartInfo.UseShellExecute = false;
                InstallApk.StartInfo.RedirectStandardInput = true;
                InstallApk.StartInfo.RedirectStandardOutput = true;
                InstallApk.StartInfo.RedirectStandardError = false;
                InstallApk.StartInfo.CreateNoWindow = true;
                InstallApk.Start();
                string InstallFile = @"adb install -r apk/" + ApkFile.Name;
                InstallApk.StandardInput.WriteLine(InstallFile);
                InstallApk.StandardInput.WriteLine("exit");
                
                //获取返回的手机设备信息
                string InstallInfo = InstallApk.StandardOutput.ReadToEnd();
                //结束进程
                //InstallApk.Kill();
                //返回信息
                label2.Text = InstallInfo;

这里怎么进行循环呢? --------------------编程问答-------------------- 你返回了就代表结束了 --------------------编程问答-------------------- 问题是……不返回……不知道执行情况呀……怎么再继续执行下去呢? --------------------编程问答-------------------- 这要看外部命令执行的那个程序有没有返回消息,如果有可以使用API函数SendMessage 不然没办法解决 --------------------编程问答-------------------- 楼主你得从安装包上下功夫,让安装包在安装过程中返回消息 然后接收,如果安装包在安装过程都没返回消息那是没办法接收到的 --------------------编程问答-------------------- 安装包返回消息?这个不可能做到呀。因为APK是JAVA开的的。也是第三方做的。限定不了。只能通过adb install -r xxx.apk来安装 --------------------编程问答-------------------- --------------------编程问答-------------------- 判断 InstallInfo 的内容。
如果没有可用的信息,可以考虑读取 StandardError
在命令行下标准错误输出也是输出到终端的 --------------------编程问答-------------------- 我不知道什么时候开始判断呀……InstallInfo肯定有返回值……但这个值出现的时间不能确定。可能是30秒。还可能是一分钟…… --------------------编程问答-------------------- 可以提前帖子不~~ --------------------编程问答--------------------
引用 8 楼  的回复:
我不知道什么时候开始判断呀……InstallInfo肯定有返回值……但这个值出现的时间不能确定。可能是30秒。还可能是一分钟……


循环不断去看他有没有返回就好了 --------------------编程问答-------------------- Process.WaitForExit Method
http://msdn.microsoft.com/zh-cn/library/system.diagnostics.process.waitforexit(v=vs.100).aspx --------------------编程问答--------------------
引用 11 楼  的回复:
Process.WaitForExit Method
http://msdn.microsoft.com/zh-cn/library/system.diagnostics.process.waitforexit(v=vs.100).aspx


解释:
Sets the period of time to wait for the associated process to exit, and blocks the current thread of execution until the time has elapsed or the process has exited.

This member is overloaded. For complete information about this member, including syntax, usage, and examples, click a name in the overload list.
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,