以下代码位于WIndows Vista上的Windows服务中托管的WCF服务中。我正在尝试使用System.Diagnostics.Process.Start()启动进程。
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.FileName = ConfigurationManager.AppSettings["ApplicationPath"];
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.EnableRaisingEvents = true;
proc.Exited += new EventHandler(proc_Exited);
proc.Start();//ConfigurationManager.AppSettings["ApplicationPath"]);
在调用start之后,当我尝试访问进程的Name时,它会抛出InvalidOperationException,表示进程已退出。
我尝试处理Exit事件 -
private void proc_Exited(object sender,System.EventArgs e) {
if (proc.ExitTime != null)
{
General.WriteLogEntry("TIME " + proc.ExitTime );
}
if (proc.ExitCode != null)
{
General.WriteLogEntry("EXITCODE " + proc.ExitCode );//+ " " + proc.Handle);
}
if (proc.Handle != null)
{
General.WriteLogEntry("HANDLE" + " " + " " + proc.Handle);
}
if (proc.StandardError != null)
{
using (var str = proc.StandardError)
{
string k = str.ReadToEnd();
General.WriteLogEntry("stderr - " + k);
}
}
}
但我无法获得有关该流程退出原因的任何信息。 StandardError没有信息。我想让这个过程运行..任何想法都会很棒。
这个过程似乎有足够的权利。当我以管理员身份登录时,我可以从UI启动它。此外,
我觉得安全是这里的问题..........你如何确保两者:
拥有足够的特权。
编辑2: 当我使用本地机器进行测试时,相同的代码就会出现问题。这是我在本地的方式:我有2个Visual Studio运行实例。一个具有WCF客户端和另一个WCF服务。我从服务应用程序启动Windows窗体,在其button_click处理程序中,我通过netTcp托管我的WCF服务。然后我使用WCF客户端来调用该服务。 WCF客户端最终调用上面的代码,并且能够启动该进程。