首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#我的应用程序在任务管理器中启动,但没有显示在桌面中

C#我的应用程序在任务管理器中启动,但没有显示在桌面中
EN

Stack Overflow用户
提问于 2020-02-21 10:08:02
回答 1查看 297关注 0票数 0

我用Top创建了一个windows服务。此服务测试电池级别,当电池成功充电(80%)时,它将打开任何UI窗体或应用程序,以便对此进行说明(在本例中,它将打开.txt)。当我在Visual中测试它时,我的UI或任何应用程序apperas都是在任务管理器和桌面中测试的,但是当我将其安装为服务时,UI或任何应用程序只出现在任务管理器中,而不是在桌面中,这里是代码:

代码语言:javascript
运行
复制
using System;
using System.Diagnostics;
using System.IO;
using System.Threading;
using System.Timers;
using System.Windows.Forms;

namespace SimpleHeartBeatService
{
    public class Heartbeat
    {
    private readonly System.Timers.Timer _timer; //referance yaratdiq
    private static bool firstChecker = true;
    private static bool secondChecker = true;
    public Heartbeat()
      {
      _timer = new System.Timers.Timer(1000) //referanca objecr menimsetdik 
        {
            AutoReset = true  //Object initializer (kitabda Constr deeper de en axirda var)
        };

        _timer.Elapsed += TimerElapsed;
    }

    private void TimerElapsed(object sender, ElapsedEventArgs e)
    {  //Bize lazim olan hisse burdan asagidadir

        PowerStatus status = SystemInformation.PowerStatus;
        if (status.PowerLineStatus.ToString() == "Online" && secondChecker)
        {
            firstChecker = true;
            secondChecker = false;
        }

        if (firstChecker && status.PowerLineStatus.ToString() == "Online" && 
                                                               status.BatteryLifePercent * 100 > 80)
        {
            Process.Start(@"C:\Users\qarib\Desktop\Test\batteryLevel.txt");


            firstChecker = false;
        }

        if (status.PowerLineStatus.ToString() == "Offline")
        {
            secondChecker = true;
        }
        // code here
        Thread.Sleep(500);
    }

    public void Start() //Bunlar mutleq yazilmalidir
    {
        _timer.Start();
    }

    public void Stop() //Bunlar mutleq yazilmalidir
    {
        _timer.Stop();
    }
}

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-24 22:34:52

http://securityinternals.blogspot.com/2014/02/windows-session-0-isolation.html

您可以阅读本文中的详细信息,但只需说Windows服务不能与普通用户的桌面进行交互就足够了。我猜您的表单实际上是在会话0中打开的,这不是您通常能够查看或与之交互的东西。

为了解决这个问题,下面是我的项目所做的。

我们已经创建了一个Windows服务,它公开了一些用于与其通信的机制。在我们的示例中,Windows服务最初使用套接字和管道公开了一个基于WCF的接口。由于开销的原因,我们最终通过本地主机转移到TCP套接字,今天我们使用的是共享内存。就这次讨论而言,这种机制并不重要。您的服务只需为用户运行的应用程序提供某种方式来连接、通信和断开连接。

一旦设置好了,您就可以构建一个应用程序,该应用程序提供了一个用于与服务通信的UI。我们已经这样做了,并允许将应用程序最小化到系统托盘,以使其看起来像是幕后的事情。然后,系统托盘图标提供了一个弹出式菜单,允许用户直接向服务发送命令或打开应用程序以获得其他功能。

HTH

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60336332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档