C#调用cmd执行参数问题

LeaveMeAlone9 2015-07-24 11:25:28
先通过调用cmd执行adb install xxx.apk的命令,试了下面的方法(arg为"install temp.apk",输出一直提示找不到temp.apk):

Process CmdProcess = new Process();

CmdProcess.StartInfo.FileName = sdkPath + @"\platform-tools\adb.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"时执行adb devices就可以。


然后试了其他方法(当arg="install temp.apk"时,这个就可以):

System.Diagnostics.Process p = new System.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();



求大神解决办法。
...全文
253 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzd24 2015-07-28
  • 打赏
  • 举报
回复
这个和C#无关,是系统当前工作目录的问题,你如果需要使用相对目录打开某个文件时,必须要确认当前工作目录是正确的。 你第一个例子中的当前工作目录是在当前程序的执行目录,很明显你的APK文件不在这个目录,所以无法正确执行。 而你第二个例子使用了CD和盘符命令将当前工作目录切换到了APK文件所在的目录,所以命令成功被执行。 你有两种解决方案,第一是使用APK的绝对路径,这样不管当前工作目录在哪里,命令都能被正确的执行。第二是在执行命令前用类似你第二个例子的方法切换当前工作目录。
xuzuning 2015-07-26
  • 打赏
  • 举报
回复
你这是调用外部命令 那么不要怕麻烦,命令和涉及的数据文件都要使用绝对路径(使用相对路径也不是完全不可以,但容易出错) 输出文件所在目录应有做够的权限 如果路径中含有空格,应用双引号将路径括起
huiyaosoft 2015-07-26
  • 打赏
  • 举报
回复
确保在cmd中执行时没有错误,使用绝对路径试试
LeaveMeAlone9 2015-07-26
  • 打赏
  • 举报
回复
难道这个没人能解?
LeaveMeAlone9 2015-07-25
  • 打赏
  • 举报
回复
D:\program files\android\sdk
LeaveMeAlone9 2015-07-25
  • 打赏
  • 举报
回复
这个就和用c#写程序调用csc命令执行编译某源文件一样的。实现起来,上面两种代码确结果不一样
threenewbee 2015-07-24
  • 打赏
  • 举报
回复
sdkPath的值是多少

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧