救急啊!为什么代码写的cmd和直接运行的cmd会不一样?

eirouna 2012-10-12 04:29:14
我写了一个webservice的方法,目的是调用一个已经写好的winform程序。我在代码里写的如下
System.Diagnostics.Process pro = new System.Diagnostics.Process();
pro.StartInfo.FileName = "cmd.exe"; 
pro.StartInfo.RedirectStandardInput = true;
pro.StartInfo.RedirectStandardOutput = true;
pro.StartInfo.UseShellExecute = false;
pro.Start();
pro.StandardInput.WriteLine("cd " + path);
pro.StandardInput.WriteLine("start " + path + "A.exe");
pro.StandardInput.WriteLine("exit");
那个exe启动到一半就自动关闭了,我查了一下是运行到this.InitializeComponent()出的问题,就是一开始加载控件的那里,但那些代码基本都是自动生成的啊,我直接双击A.exe可以正常启动,没有问题,直接开cmd,然后打
start path + A.exe
启动也没有问题,这究竟是怎么回事啊???
我本来想直接启动A.exe,就是pro.StartInfo.FileName = path + "A.exe";也不能成功,所以有没有什么办法解决呢?

ps:我用简单的程序测过没有问题,但我想要的程序或类似的程序就会出这种问题。
...全文
212 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
eirouna 2012-10-16
  • 打赏
  • 举报
回复
没有人吗,那就要散分了
eirouna 2012-10-15
  • 打赏
  • 举报
回复
找到问题了,是因为程序中加载的一个ocx的问题,我试了一下就一个winform上放一个这个ocx,就出这种问题,如果把A.exe中的这个ocx去掉就没有问题,估计可能受权限的影响,现在有一个方法是写一个监听程序,监听webservice发出的信息,然后由这个程序去启动A.exe,还有就是写一个服务来监听,哪个比较好,或者有没有其他方法?

ps:如果是写服务的话该怎么写,或者有没有什么资料?
TNight 2012-10-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

我觉得可能是this的问题,首先的程序是exe里面控件初始化的问题,那么pro.StartInfo.FileName = path + "A.exe";这个尝试就毫无意义,因为,程序可以找到这个exe 而是exe本身出了问题,我觉得应该是this的问题,你把this.去掉试试
[/Quote]
exe中的初始化
eirouna 2012-10-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
在exit之前
pro.WaitForInputIdle();等待界面初始化完成

不过,你直接用Process运行exe不行吗?为什么要借用cmd呢????
[/Quote]

加了pro.WaitForInputIdle();也没用,界面还没出来就进程结束了,直接用Process运行exe也同样情况。
在服务中有一项“World Wide Web Publishing Service”,在“登录”中的“允许服务与桌面交互”,一打上这个勾,就会发生这样的问题,但是我一去掉,就看不见窗口,但进程却是正常运行的,不过因为有时候会在窗口上进行操作,所以窗口必须出现,该怎样解决呢?
eirouna 2012-10-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
我觉得可能是this的问题,首先的程序是exe里面控件初始化的问题,那么pro.StartInfo.FileName = path + "A.exe";这个尝试就毫无意义,因为,程序可以找到这个exe 而是exe本身出了问题,我觉得应该是this的问题,你把this.去掉试试
[/Quote]

哪里的this?
sofant 2012-10-12
  • 打赏
  • 举报
回复
在exit之前
pro.WaitForInputIdle();等待界面初始化完成

不过,你直接用Process运行exe不行吗?为什么要借用cmd呢????
TNight 2012-10-12
  • 打赏
  • 举报
回复
我觉得可能是this的问题,首先的程序是exe里面控件初始化的问题,那么pro.StartInfo.FileName = path + "A.exe";这个尝试就毫无意义,因为,程序可以找到这个exe 而是exe本身出了问题,我觉得应该是this的问题,你把this.去掉试试

110,537

社区成员

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

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

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