gpt4 book ai didi

c# - 如何从 WPF 应用程序方法运行 Windows 服务应用程序

转载 作者:行者123 更新时间:2023-11-30 21:43:24 26 4
gpt4 key购买 nike

我知道从 Windows 服务应用程序启动进程是不可能的(或者非常困难,因为 Windows 服务运行在一个独立的进程中)。但是,是否可以从 WPF 应用程序内的方法运行 Windows 服务?如果是这样,我如何在 C# 中执行此操作?

最佳答案

首先,一些背景:

Windows 服务 (WS) 是一个后台进程,它在没有用户界面的情况下运行(忽略你这个顽皮的 WS,勾选了允许服务与桌面交互)并且可以在用户登录之前运行。因为这个 WS 可能运行在 LOCALSYSTEM 的上下文中; NETWORK SERVICE 或者甚至是专用于该服务的明确用户帐户。在启动期间和用户登录之前随 Windows 一起启动的服务称为自动启动服务。甚至还有一种称为延迟自动启动的怪兽。

However, is it possible to run a windows service from a method inside a WPF application?

如果“运行”是指如何触发先前部署的 WS 启动,那么“是!”。

考虑下面的示例并想象方法 SomeMethodInMyWpfApp() 存在于您的 WPF 应用程序中的某个位置。然后通过简单地调用此方法,我们获得了对名称为 “MissPiggyService” 的 WS 的服务 Controller 的引用。一旦我们有了引用,我们就可以查询服务的状态。它在运行吗?是在启动过程中吗?如果这两个问题的答案都是“否”,那么我们会发出启动服务请求。我们这样做是因为告诉 SC 启动已经在启动过程中的服务通常不太好。

void SomeMethodInMyWpfApp()
{

ServiceController sc = new ServiceController("MissPiggyService");
if (sc.Status != ServiceControllerStatus.Running &&
sc.Status != ServiceControllerStatus.StartPending)
{
sc.Start();
}
}

但是,如果“但是,是否可以从 WPF 应用程序内部的方法运行 Windows 服务?”,您可以创建;在您的 WPF 应用程序中复制并运行外部 WS 的功能——然后就不行了。

WS 不是常规流程。对于一个你不能将一个进程嵌入另一个进程(至少我不认为你可以,我们在这里不是在谈论 AppDomains)但更重要的是,WS 需要能够响应 Windows 服务 Controller 当它要求您的 WS 开始、停止并可能暂停。常规流程未实现的内容。

关于c# - 如何从 WPF 应用程序方法运行 Windows 服务应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41753814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com