是否可以从Windows服务启动当前控制台使用的winform

时间:2012-02-22 15:05:31

标签: c#

我正在尝试创建一个监视和更新应用程序(winform)的Windows服务,如果它停止或者它没有运行应该启动它。但它应该作为当前的控制台用户运行应用程序。 我的问题是它使用网络服务凭证启动表单,因此它对当前用户不可用。

     protected override void OnStart(string[] args)
    {
        if (!GetProcessList())
        {
            Process p = new Process();
            p.EnableRaisingEvents = true;
            p.Exited += new EventHandler(p_Exited);
            StartProcces();

        }
        else 
        {
            eventLog1.WriteEntry("Process is running");
        }
    }

    void p_Exited(object sender, EventArgs e)
    {
        StartProcces();
    }
    static void StartProcces() 
    {
        System.Diagnostics.ProcessStartInfo myProcess = new System.Diagnostics.ProcessStartInfo(@Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName) + "\\WmiMonClient.exe");
        myProcess.WorkingDirectory = System.Reflection.Assembly.GetEntryAssembly().Location;

        //set environment path           
        try
        {
            System.Diagnostics.Process.Start(myProcess);
        }
        catch (Exception ex)
        {


        }
    }
    private static bool GetProcessList()
    {
        bool proccesIsRunning = false;
        Process[] processlist = Process.GetProcesses();

        foreach (Process theprocess in processlist)
        {
            if (theprocess.ProcessName == "WmiMonClient.exe") 
            {
                proccesIsRunning = true;
            }
        }
        return proccesIsRunning;
    }

    protected override void OnStop()
    {
    }

1 个答案:

答案 0 :(得分:0)

攻击此方法的一种方法可能是创建一个执行上述代码的计划任务(使用Windows计划程序)。如果是,它只是再次启动它。

这具有已经运行用户上下文的优点,而不必从Windows服务中考虑它。