如何在Windows 10中创建不可阻挡的应用程序

时间:2019-06-13 06:58:14

标签: c# windows windows-services

我制作了一个在屏幕上显示时钟的应用程序,该时钟指示您的工作量。此应用程序通过发送Windows 10通知获取/发布Web服务并在用户工作结束时通知用户。

此应用仅适用于我们公司的员工,并且仅在Windows 10设备中部署。由于员工没有接触Windows服务的特权,因此我制作了Windows服务来检查应用程序是否正在运行,并在未运行时启动该应用程序。这样,即使用户在任务管理器中将其杀死,它也将重新运行。

但是,这没有用。我从中找出原因:
How can I run an EXE program from a Windows Service using C#?
Run windows application from Windows service
How to run console application from Windows Service?
Allow service to interact with desktop in Windows
我也阅读了越来越多的文章。

有人说Windows服务只能运行控制台应用程序,并建议制作Windows应用程序而不是Windows服务。

因此,我已经在Windows服务和该应用之间创建了控制台应用程序。 Windows服务使控制台应用程序保持运行状态,而控制台应用程序使另一个应用程序保持运行。

Windows服务

''Windows Service
protected override void OnStart(string[] args)
{
    timer.Elapsed += new ElapsedEventHandler(OnElapsedTime);
    timer.Interval = 5000;
    timer.Enabled = true;
}

private void OnElapsedTime(object source, ElapsedEventArgs e)
{
    bool isAppRunning = IsProcessOpen("WorkingTimeAppConsole");
    if (!isAppRunning)
    {
        Process pr = new Process();
        pr.StartInfo.FileName = @"C:\Program Files (x86)\Default Company Name\Setup1\WorkingTimeAppConsole.exe";
        pr.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
        pr.StartInfo.CreateNoWindow = false;
        pr.Start();
    }
}

控制台应用程序

''Console application
class Program
{
    static void Main(string[] args)
    {
        while (true)
        {
            bool flg = false;
            Process[] processList = Process.GetProcessesByName("WorkingTimeApp");
            foreach (Process p in processList)
            {
                flg = true;
                if (p.Responding)
                {
                    Console.WriteLine("OK");
                    break;
                }
                else
                {
                    p.Close();
                    RunApp();
                }
            }
            if (!flg)
            {
                RunApp();
            }
            System.Threading.Thread.Sleep(5000);
        }

    }

    static void RunApp()
    {
        Process myProcess = new Process();
        myProcess.StartInfo.FileName = @"C:\Program Files (x86)\Default Company Name\Setup1\WorkingTimeApp.exe";
        myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
        myProcess.Start();
    }
}

这也没有用。

另一种解决方案使Windows应用程序变得无法替代,无法阻止用户停止应用程序。所以我没有尝试。

我还需要做些什么其他方式?

0 个答案:

没有答案