C# - 来自 Windows 服务的 运行 WPF 应用程序
C# - Run WPF application from Windows Service
我有一项服务可以跟踪 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 应用程序 window。
感谢@adriano-repetti,我找到了如何从 Windows 服务 运行 WPF 应用程序并将其显示在屏幕上的解决方案。解决方案在这里:https://github.com/murrayju/CreateProcessAsUser。这个人做了 ProcessExtensions static class 以当前用户身份启动新进程。
我的几句话:如果您正在循环检查进程 (active/inactive) 的状态,请考虑这种 "special" 打开应用程序的方法造成的延迟。与传统方式相比,这真的很耗时。我设置了 3500 毫秒,我的应用程序确实在闪烁。改成5000ms后一切正常
从 windows 服务,您可以 运行 启动 WPF 应用程序的控制台应用程序。这很棘手,但应该可以。
我有一项服务可以跟踪 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 应用程序 window。
感谢@adriano-repetti,我找到了如何从 Windows 服务 运行 WPF 应用程序并将其显示在屏幕上的解决方案。解决方案在这里:https://github.com/murrayju/CreateProcessAsUser。这个人做了 ProcessExtensions static class 以当前用户身份启动新进程。
我的几句话:如果您正在循环检查进程 (active/inactive) 的状态,请考虑这种 "special" 打开应用程序的方法造成的延迟。与传统方式相比,这真的很耗时。我设置了 3500 毫秒,我的应用程序确实在闪烁。改成5000ms后一切正常
从 windows 服务,您可以 运行 启动 WPF 应用程序的控制台应用程序。这很棘手,但应该可以。