public void callApp(string filename)
{
    ServiceController service = new ServiceController("Pronto Data Server");
    if (service.Status.Equals(ServiceControllerStatus.Stopped))
    {
        service.Start();
        service.WaitForStatus(ServiceControllerStatus.Running);
    }
    Process process = new Process();
    process.StartInfo.FileName = filename;
    process.Start();
    while (process.HasExited)
    {
        service.Stop();
        service.WaitForStatus(ServiceControllerStatus.Stopped);
        Environment.Exit(0);
    }
}在程序中调用了以上的方法,服务及外部程序及执行成功,就是While循环里的语句在DEBUG时可执行,到真正应用起码却并没有执行,请问各位是什么问题呢?

解决方案 »

  1.   

    完整的代码如下using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Diagnostics;
    using System.IO;
    using System.ServiceProcess;
    using System.Threading;namespace ProntoDataServerCall
    {
        public partial class Form1 : Form
        {
            public string filename="ProntoEdit Professional 2.0.exe";
            public Form1()
            {
                InitializeComponent();
                FileInfo file = new FileInfo(filename);
                if (!file.Exists)
                {
                    MessageBox.Show("Plesse locate the file", "Tips", MessageBoxButtons.OK);
                    openFileDialog1.ShowDialog();
                    filename = openFileDialog1.FileNames[0];
                    if (filename.Contains("ProntoEdit Professional"))
                    {
                        try
                        {
                            openFileDialog1.OpenFile();
                            callApp(filename);
                        }
                        catch
                        {
                            Environment.Exit(0);
                        }
                    }
                }
                else
                    callApp(filename);
                
            }
            public void callApp(string filename)
            {
                ServiceController service = new ServiceController("Pronto Data Server");
                if (service.Status.Equals(ServiceControllerStatus.Stopped))
                {
                    service.Start();
                    service.WaitForStatus(ServiceControllerStatus.Running);
                }
                Process process = new Process();
                process.StartInfo.FileName = filename;
                process.Start();
                while (process.HasExited)
                {
                    service.Stop();
                    service.WaitForStatus(ServiceControllerStatus.Stopped);
                    Environment.Exit(0);
                }
            }
        }
    }
      

  2.   

    WHILE语句重新修改了一下就OK了
    while (true)
    {
        if(process.HasExited)
        {
            service.Stop();
            service.WaitForStatus(ServiceControllerStatus.Stopped);
            Environment.Exit(0);
        }
        else
        {
            Thread.Sleep(2000);
        }
    }