关于调用CMD的问题!急!

kneek 2007-05-10 09:56:26
我调用AS400的Client Access从Db2数据库下载数据到文件使用rtopcb.exe

private string RunCmd(string strCmd)
{
string rInfo;

try
{
Process myProcess = new Process();
ProcessStartInfo myProcessStartInfo = new ProcessStartInfo("cmd.exe");
myProcessStartInfo.UseShellExecute = false;
myProcessStartInfo.RedirectStandardOutput = true;
myProcess.StartInfo = myProcessStartInfo;
myProcessStartInfo.Arguments = " /c " + strCmd;
myProcess.Start();
StreamReader myStreamReader = myProcess.StandardOutput;
rInfo = myStreamReader.ReadToEnd();
myProcess.WaitForExit();
myProcess.Close();
rInfo = strCmd +"\r\n"+ rInfo;
return rInfo;
}
catch(Exception ex)
{
return ex.Message;
}
}
调用如下:
private void cmdExec_ServerClick(object sender, System.EventArgs e)
{
Response.Write(RunCmd("rtopcb /s /i "+Server.MapPath(".")+"\\script\\"+tmpCheck.ID+".dtf"));
}

打出来的信息如下:
rtopcb /s /i D:\基础数据平台\ViewTable\script\05080157.dtf IBM iSeries Access Windows 版版本 5 发行版 2 级别 0 从 iSeries 传送数据 (C) Copyright IBM Corporation and Others 1984, 2002. All rights reserved. U.S. Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. Licensed Materials - Property of IBM 传送文件:D:\基础数据平台\ViewTable\script\05080157.dtf
说明外部程序是运行了可是没有取数据。

如果上面的命令直接在cmd.exe下运行结果如下:

IBM iSeries Access Windows 版
版本 5 发行版 2 级别 0
从 iSeries 传送数据
(C) Copyright IBM Corporation and Others 1984, 2002. All rights reserved.
U.S. Government Users Restricted Rights - Use, duplication or disclosure
restricted by GSA ADP Schedule Contract with IBM Corp.
Licensed Materials - Property of IBM

传送文件:D:\基础数据平台\ViewTable\script\05080157.dtf
接收成功完成。
已传送的行:1

上面两个的不同就是一个取到了数据另一个没有。如果我把命令改为“del c:\test.txt”,也是一样的结果根本就不delete文件请高手帮帮我。
...全文
299 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
kneek 2007-05-16
  • 打赏
  • 举报
回复
如果是windows应用程序没有问题可以取到数据,如果是编写成windows服务也和前面一样取不到数据。晕死啊!!!!!!!!!!!!!!!!!!!!!!!!!!!1
Red_angelX 2007-05-15
  • 打赏
  • 举报
回复
ms不因该啊
看下web权限下rtopcb 能访问 D:\基础数据平台\ViewTable\script\05080157.dtf么
kneek 2007-05-15
  • 打赏
  • 举报
回复
duke731谢谢,我以前就试过了,没有用。
GKW 2007-05-10
  • 打赏
  • 举报
回复
ProcessStartInfo的Arguments,不代表命令后面的参数。

我的做法是把命令写入bat文件,或者自己生成bat文件,然后调用。
duke731 2007-05-10
  • 打赏
  • 举报
回复
正巧偶最近也碰到这个问题HOHO
问题出在Server.MapPath(".")这个东西取到的路径是带转义字符的,就是说它取到的路径像这样
d:\\test\\aaa.txt
你可以把这里换成一个本地路径试试就知道了
kneek 2007-05-10
  • 打赏
  • 举报
回复
啊会是.net用户的权限有要特殊设置的。如果我的命令改为“dir”没有问题。
cnwolfs 2007-05-10
  • 打赏
  • 举报
回复
mark
duke731 2007-05-10
  • 打赏
  • 举报
回复
要不你照这样试试

Process p = new Process();
p.StartInfo.FileName = "cmd.exe";

p.StartInfo.UseShellExecute = false;

p.StartInfo.RedirectStandardInput = true;

p.StartInfo.RedirectStandardOutput = true;

p.StartInfo.RedirectStandardError = true;

// not display window
p.StartInfo.CreateNoWindow = true;

p.Start();

p.StandardInput.WriteLine("net start AutoReport ");

p.StandardInput.WriteLine("exit");

//string strRst = p.StandardOutput.ReadToEnd();
p.Close();
kneek 2007-05-10
  • 打赏
  • 举报
回复
to :duke731(沙僧)
和Server.MapPath(".")应该没有关系的,我把最终的命令打出来的:
rtopcb /s /i D:\基础数据平台\ViewTable\script\05080157.dtf 是没有问题的。

110,566

社区成员

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

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

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