c# -从Windows Service运行WPF应用程序
本文关键字:运行 WPF 应用程序 Service Windows | 更新日期: 2023-09-27 18:06:04
我有一个服务,它跟踪WPF应用程序是否在计算机上运行。如果它发现,这样的应用程序已被关闭,然后它再次打开它。这是在一个循环中完成的。
是的,我知道这对大多数用户来说是不好的做法,但在某些情况下,这是必要的。
我所做的是一个可以运行WPF应用程序的服务。结果是,我可以在任务资源管理器中看到这个应用程序,但不能在屏幕上看到。我还知道App.xaml.cs中的构造函数被触发,因为我编写了测试代码,它创建了一个空文件。
服务源代码:
private Timer timer;
protected override void OnStart(string[] args)
{
timer = new Timer();
timer.Interval = 3000;
timer.Elapsed += this.Timer_Elapsed;
timer.Enabled = true;
}
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
if (!this.CheckIfRunning("Application"))
{
ProcessStartInfo psi = new ProcessStartInfo();
psi.CreateNoWindow = false;
psi.FileName = @"D:'Application.exe";
psi.WindowStyle = ProcessWindowStyle.Normal;
Process proc = new Process();
proc.StartInfo = psi;
proc.Start();
}
}
protected override void OnStop()
{
timer.Enabled = false;
}
所有我想做的,只是打开WPF应用程序的可见窗口。
感谢@adriano-repetti,我找到了如何从Windows Service运行WPF应用程序并将其显示在屏幕上的解决方案。解决方案在这里:https://github.com/murrayju/CreateProcessAsUser。这个家伙做了ProcessExtensions静态类,它以当前用户的身份启动新进程。
我的几句话:如果您正在检查循环中的进程状态(活动/非活动),请考虑由这种"特殊"打开应用程序的方法引起的延迟。与传统的方式相比,这真的很耗时。我设置了3500毫秒,我的应用程序真的在闪烁。将其更改为5000ms后,一切正常
从windows服务,您可以运行控制台应用程序启动WPF应用程序。