可视化从windows服务通知当前用户的最简单方法是什么

本文关键字:用户 最简单 方法 是什么 windows 服务 通知 可视化 | 更新日期: 2023-09-27 17:59:02

我需要通过windows服务提醒当前用户。我在网上见过一些复杂的方法,但大多数都过时了。我希望Windows 10能出现一些简单的东西。我正在尝试的一个想法是创建一个WPF应用程序,它有一个简单的消息。。。

System.Diagnostics.Process.Start("C:''blah''WpfApplication1.exe");

但它在后台运行,因为服务不知道为哪个用户运行它。因此,我需要获得当前登录的桌面用户(如果有多个用户,我会通知所有用户)。然后,如果我能以某种方式使用CreateProcessAsUser或类似的东西,那就可以了。提前感谢,

可视化从windows服务通知当前用户的最简单方法是什么

Windows服务在名为System的提升状态下运行,该状态由Microsoft设计为不与用户交互。但是,有一种方法可以使用Microsoft在此处编写的名称空间从服务启动应用程序。

在代码中包含命名空间并执行它
CreateProcessAsUserWrapper.LaunchChildProcess(PATH_TO_EXE)

关于这一点,有一个stackoverflow的答案:

  • 如何使用C#从Windows服务运行EXE程序

User Pixel回答了我的问题,但我想为未来的搜索者提供更多细节。代码可在http://www.getcodesamples.com/src/FBB7577C/7A33AB93但如果它消失了,只需搜索CreateProcessAsUserWrapper。将代码粘贴到Service1.cs工作区中,并删除顶部的名称空间行和相应的括号,因为您已经有了名称空间。所以第一行是:

class CreateProcessAsUserWrapper

另外,把它放在服务类之后,服务类必须是第一类。我不需要添加任何using语句,所以我不知道它使用了哪些语句。我会把我用过的都贴在下面。

using Microsoft.Win32; // for registry key
using System;
using System.Collections; // for getfiles
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics; // for log writing
using System.IO; // for file watcher, file i/o, directory.exists
using System.Linq;
using System.Net;
using System.Runtime.InteropServices; // for SHGetKnownFolderPath
using System.Security.Permissions; // for file watcher, registry key
using System.ServiceProcess;
using System.Text;
using System.Threading; // for sleep
using System.Timers; // for timers

然后,正如Pixel所提到的,你所要做的就是从你的服务内部调用它,比如:

CreateProcessAsUserWrapper.LaunchChildProcess("C:''blah''WpfApplication1.exe")