请教大家.NET调用Process的问题

蓝天之紫 2013-09-05 10:16:12
Dear all,

有个关于.NET调用Process的问题,想请教下大家:

需求:通过Web上的一个按键(该Web在ServerA)上,点击后将本地一个文件传到对端Linux的服务器ServerB上。

过程:第一步:建立了一个bat批处理文件,经测试,双击该bat文件,可以正常上传至ServerB。
第二步: 将该文件放到程序里调用(Process类),经测试,该bat文件已被调用,但并没有完成上传ServerB功能。

不太清楚问题在哪里。。谢谢!

PS:Web ServerA配置:Windows Server 2008 R2 64bit;IIS 7.5;
对端Linux ServerB配置:Ubuntu Linux 64 bit。

-------------------------------------
public static void ExecutePsftp(string strCommand)
{
//System.Diagnostics.Process.Start(@"C:\HCSSpreadsheet\command\BatchUploadExcel.bat");
int ExitCode;
ProcessStartInfo ProcessInfo;
Process Process;

ProcessInfo = new ProcessStartInfo("cmd.exe");
ProcessInfo.CreateNoWindow = true;
ProcessInfo.UseShellExecute = false;
ProcessInfo.WorkingDirectory = @"C:\Users\Administrator\";
ProcessInfo.Arguments = "/c C:\\TestSpreadsheet\\PassedCombined.xls";
Process = Process.Start(ProcessInfo);
Process.WaitForExit();

ExitCode = Process.ExitCode;
Process.Close();
}
...全文
330 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
jshi123 2013-09-10
  • 打赏
  • 举报
回复
调用的地方改下,看看输出是什么。 ProcessInfo.RedirectStandardOutput = true; ProcessInfo.RedirectStandardError = true; Process = Process.Start(ProcessInfo); string output = Process.StandardOutput.ReadToEnd(); string err = Process.StandardError.ReadToEnd(); // write to response or log file
蓝天之紫 2013-09-10
  • 打赏
  • 举报
回复
引用 18 楼 jshi123 的回复:
调用的地方改下,看看输出是什么。 ProcessInfo.RedirectStandardOutput = true; ProcessInfo.RedirectStandardError = true; Process = Process.Start(ProcessInfo); string output = Process.StandardOutput.ReadToEnd(); string err = Process.StandardError.ReadToEnd(); // write to response or log file
非常感谢,问题解决了。 我把bat转为exe试了下,并在IIS中设置handler mapping。搞定了!
蓝天之紫 2013-09-10
  • 打赏
  • 举报
回复
引用 16 楼 jshi123 的回复:
"psftp.exe" usmcli@10.10.16.6 -pw hello12345 -b "C:\HCSSpreadsheet\command\uploadExcel.bat" -bc 改成: echo y. | "psftp.exe" usmcli@10.10.16.6 -pw hello12345 -b "C:\HCSSpreadsheet\command\uploadExcel.bat" -bc
谢谢!现在没有POST pending状态了,但依然是:debug环境可以上传,url访问aspx页面地址时没有上传。
蓝天之紫 2013-09-09
  • 打赏
  • 举报
回复
引用 12 楼 jshi123 的回复:
试试在web.config中加上: <identity impersonate="true" userName="administrator" password="xxxxxxx" />
访问页面时,提交我的数据,但一直显示在POST,并且上面一直是connecting状态。 不知道这是什么原因呢?谢谢指教!
蓝天之紫 2013-09-09
  • 打赏
  • 举报
回复
引用 12 楼 jshi123 的回复:
试试在web.config中加上: <identity impersonate="true" userName="administrator" password="xxxxxxx" />
谢谢指点! 加上后改观不大,发现url访问时一直在connecting。。但debug时一切正常。
jshi123 2013-09-09
  • 打赏
  • 举报
回复
"psftp.exe" usmcli@10.10.16.6 -pw hello12345 -b "C:\HCSSpreadsheet\command\uploadExcel.bat" -bc 改成: echo y. | "psftp.exe" usmcli@10.10.16.6 -pw hello12345 -b "C:\HCSSpreadsheet\command\uploadExcel.bat" -bc
jshi123 2013-09-07
  • 打赏
  • 举报
回复
试试在web.config中加上: <identity impersonate="true" userName="administrator" password="xxxxxxx" />
jshi123 2013-09-07
  • 打赏
  • 举报
回复
在 /etc/ssh/sshd_config中找到: Subsystem sftp /usr/libexec/openssh/sftp-server 改成: Subsystem sftp /usr/libexec/openssh/sftp-server -l INFO 日志在/var/log/messages里面
蓝天之紫 2013-09-07
  • 打赏
  • 举报
回复
引用 9 楼 jshi123 的回复:
1。你用了很多路径,检查这些路径是否都正确。 2。服务器的host key是否缓存了?就是在手工执行bat的时候,psftp会提示你: Store key in cache? (y/n) 应该选y 3。你可以加上下面的语句,把运行输出记录下来,看看有没有问题: ProcessInfo.RedirectStandardOutput = true; Process = Process.Start(ProcessInfo); Process.WaitForExit(); string output = Process.StandardOutput.ReadToEnd(); Console.WriteLine(output); // or MessageBox.Show(output); File.WriteAllText("d:/log.txt",output);
谢谢~解决问题了!debug时可以上传了! 不过当我直接访问url时,却没有上传到linux上。。有没有什么地方可以看linux sftp的log?
蓝天之紫 2013-09-07
  • 打赏
  • 举报
回复
引用 6 楼 sp1234 的回复:
直接执行就行了,用不着调用cmd.exe。
这样试过了,不行。 还是跳过了psftp那步,只执行两步echo
jshi123 2013-09-07
  • 打赏
  • 举报
回复
1。你用了很多路径,检查这些路径是否都正确。 2。服务器的host key是否缓存了?就是在手工执行bat的时候,psftp会提示你: Store key in cache? (y/n) 应该选y 3。你可以加上下面的语句,把运行输出记录下来,看看有没有问题: ProcessInfo.RedirectStandardOutput = true; Process = Process.Start(ProcessInfo); Process.WaitForExit(); string output = Process.StandardOutput.ReadToEnd(); Console.WriteLine(output); // or MessageBox.Show(output); File.WriteAllText("d:/log.txt",output);
  • 打赏
  • 举报
回复
直接执行就行了,用不着调用cmd.exe。
蓝天之紫 2013-09-06
  • 打赏
  • 举报
回复
谢谢各位指导,虽然debug时可以顺利上传到linux server上了,但当我用ip访问页面时,却还是没能上传成功。。。什么情况啊。。
蓝天之紫 2013-09-06
  • 打赏
  • 举报
回复
引用 2 楼 jshi123 的回复:
怎么批处理的后缀是.xls啊
不好意思打错了。应该是一个bat文件,暂且叫bat1.bat吧,是这样子的: set sDate=%date% echo %sDate%>C:\date.txt (此echo测试用) "psftp.exe" usmcli@10.10.16.6 -pw hello12345 -b "C:\HCSSpreadsheet\command\uploadExcel.bat" -bc (这里调用另一个bat文件,叫bat2,功能是把一个excel文件上传到linux server) set sTime=%time%; echo %sTime%>C:\time.txt; (此echo测试用) bat2: cd /home/sftp/bulkloads/ (上传到linux server的这个路径下) mput C:\HCSSpreadsheet\HCS\CombinedA-result.xls C:\HCSSpreadsheet\HCS\CombinedB-result.xls
xiaogui340 2013-09-06
  • 打赏
  • 举报
回复
start之后干嘛又把process关掉?
jshi123 2013-09-06
  • 打赏
  • 举报
回复
怎么批处理的后缀是.xls啊

62,052

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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