我用 Top Shelf 创建了一个 Windows 服务。 该服务测试电池电量,当电池成功充电(80%)时,它会打开任何 UI Windows 窗体或应用程序来通知我(在本例中它打开 .txt)。 当我在 Visual Studio 中测试它的工作正常时,我的 UI 或任何应用程序都出现在任务管理器和桌面中,但是当我将其安装为服务时,UI 或任何应用程序仅出现在任务管理器中而不出现在桌面中,这里是代码:

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();
    }
}

}

#1楼 票数:0 已采纳

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

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

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

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

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

HTH

  ask by Mahmood Garibov translate from so

未解决问题?本站智能推荐:

1回复

Windows服务可以在没有登录的情况下启动应用程序吗?

我的问题是另一种可能性,然后是如何。 我目前有两个自定义Windows服务,一个使用TCP通过网络从客户端向主机发送文件,另一个接收这些文件,一旦传输完成,就启动一个C#应用程序,开始将这些文件上传到数据库(两个服务)做更多但这是他们所做的基本想法)。 我的问题是,是否有可能让主机(服务器)
2回复

从Windows服务启动GUI应用程序-方法

注意:尽管作为同一问题的另一个问题出现,但事实并非如此,但选择正确的标题似乎很难,因此欢迎更改更合适的标题。 我正在尝试解决从 Windows 7 Embedded(POS 就绪)上的服务应用程序启动 GUI 应用程序(Windows 窗体、.NET)的问题,并且遇到了多种解决方案,但它们都不起作用
5回复

在.NET服务应用程序中,应在哪里添加应执行的功能?

我知道如何“创建”服务应用程序。 我知道在main()函数中写什么。 我知道如何将EventLog(或其他组件)添加到服务。 我知道如何定义服务启动,停止或恢复时会发生什么。 我想知道的是... 我希望我的Windows服务执行某些功能(例如索引文件)。 在哪里添加代码以
1回复

从Windows服务控制我的应用程序

我有一个C#桌面应用程序,它具有一些用户输入字段和2个按钮-START&STOP。 单击“开始”后,它将连接到服务器/外部设备。 连接后,用户可以输入数据并将信息发送到服务器/外部设备。 现在,我需要创建一个Windows服务来自动开始和停止与服务器的连接。 我的意思是一种与服务器建立连
1回复

C#Windows服务无法启动:“无法从命令行或调试器启动服务”

即使有类似的问题,我也找不到解决我问题的方法。 我有一个作为服务运行的简单程序,我想以编程方式启动它。 就这么简单: private static void StartService(){ ServiceBase[] ServicesToRun; ServicesToRun =
2回复

如何在系统启动时使用c#服务执行进程

我有 ac# 服务,我需要在设备启动时执行特定进程。 我如何使用 c# 来做到这一点。 我不知道如何检测 Windows 正在启动。
1回复

作为Windows服务运行时应用程序的异常行为

我已经创建了C#项目,其中的处理核心是从C++移植过来的-核心只是完成工作-获取简单数据,对其进行处理,然后将结果返回为简单数据。 作为控制台应用程序运行时,该项目工作正常: 当我将其更改为以最简单的Windows进程运行时,使用MainProcess main = new MainPr
2回复

C#-InstallUtil-服务无法启动

我在C#中有一个服务,似乎无法启动,我在下面创建了一个屏幕截图: 服务是否返回了未加载状态(NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)? http://i.imgur.com/aG7F7.png