问题描述
先通过调用cmd执行adbinstallxxx.apk的命令,试了下面的方法(arg为"installtemp.apk",输出一直提示找不到temp.apk):ProcessCmdProcess=newProcess();CmdProcess.StartInfo.FileName=sdkPath+@"platform-toolsadb.exe";CmdProcess.StartInfo.Arguments=arg;CmdProcess.StartInfo.CreateNoWindow=true;CmdProcess.StartInfo.UseShellExecute=false;CmdProcess.StartInfo.RedirectStandardInput=true;CmdProcess.StartInfo.RedirectStandardOutput=true;CmdProcess.StartInfo.RedirectStandardError=true;CmdProcess.OutputDataReceived+=CmdProcess_OutputDataReceived;CmdProcess.ErrorDataReceived+=CmdProcess_ErrorDataReceived;CmdProcess.EnableRaisingEvents=true;CmdProcess.Exited+=CmdProcess_Exited;CmdProcess.Start();CmdProcess.BeginOutputReadLine();CmdProcess.BeginErrorReadLine();
但是arg为"devices"时执行adbdevices就可以。然后试了其他方法(当arg="installtemp.apk"时,这个就可以):System.Diagnostics.Processp=newSystem.Diagnostics.Process();p.StartInfo.FileName="cmd.exe";p.StartInfo.UseShellExecute=false;p.StartInfo.RedirectStandardInput=true;p.StartInfo.RedirectStandardOutput=true;p.StartInfo.RedirectStandardError=true;p.StartInfo.CreateNoWindow=true;p.Start();//向cmd窗口发送输入信息p.StandardInput.WriteLine(@"cd");p.StandardInput.WriteLine(@"d:");p.StandardInput.WriteLine(@"cd"+sdkPath+@"platform-tools");p.StandardInput.WriteLine("adb"+arg);p.StandardInput.AutoFlush=true;p.StandardInput.WriteLine("exit");p.WaitForExit();p.Close();
求大神解决办法。
解决方案
解决方案二:
sdkPath的值是多少
解决方案三:
D:programfilesandroidsdk
解决方案四:
这个就和用c#写程序调用csc命令执行编译某源文件一样的。实现起来,上面两种代码确结果不一样
解决方案五:
难道这个没人能解?
解决方案六:
确保在cmd中执行时没有错误,使用绝对路径试试
解决方案七:
你这是调用外部命令那么不要怕麻烦,命令和涉及的数据文件都要使用绝对路径(使用相对路径也不是完全不可以,但容易出错)输出文件所在目录应有做够的权限如果路径中含有空格,应用双引号将路径括起
解决方案八:
这个和C#无关,是系统当前工作目录的问题,你如果需要使用相对目录打开某个文件时,必须要确认当前工作目录是正确的。你第一个例子中的当前工作目录是在当前程序的执行目录,很明显你的APK文件不在这个目录,所以无法正确执行。而你第二个例子使用了CD和盘符命令将当前工作目录切换到了APK文件所在的目录,所以命令成功被执行。你有两种解决方案,第一是使用APK的绝对路径,这样不管当前工作目录在哪里,命令都能被正确的执行。第二是在执行命令前用类似你第二个例子的方法切换当前工作目录。