2 回答
TA贡献1793条经验 获得超6个赞
当您的应用程序启动时,只需检查服务是否已启动
表示 Windows 服务,并允许您连接到正在运行或已停止的服务、操作它或获取有关它的信息。
一个完全未经测试的例子
// Check whether the service is started.
ServiceController sc = new ServiceController();
sc.ServiceName = "MyAwesomeService";
Console.WriteLine("The MyAwesomeService status is currently set to {0}",
sc.Status.ToString());
if (sc.Status == ServiceControllerStatus.Stopped)
{
// Start the service if the current status is stopped.
Console.WriteLine("Starting MyAwesomeService...");
try
{
// Start the service, and wait until its status is "Running".
sc.Start();
sc.WaitForStatus(ServiceControllerStatus.Running);
// Display the current service status.
Console.WriteLine("The MyAwesomeService is now set to {0}.",
sc.Status.ToString());
}
catch (InvalidOperationException)
{
Console.WriteLine("Could not start the MyAwesomeService.");
}
}
更新
ServiceController 将使用当前线程的主体来进行注册表和服务控制管理器调用,如果要操作服务,则必须确保将其设置为管理员用户。
你可以模拟用户,或者添加更多细粒度的权限来让你的用户启动和停止它,或者强制你的应用程序以管理员权限启动
TA贡献1821条经验 获得超6个赞
可以为应用程序做同样的事情吗?
不,没有办法做到这一点。
我希望系统在我的应用程序启动时启动某个服务(如果它还没有启动)
因此,请延迟服务自动启动/自动启动(取决于您的偏好)。
不幸的是,.net 服务存在问题。它们只能通过延迟启动可靠地启动
服务自动启动并不意味着该服务将在您的应用程序需要时启动。应用程序可以通过自动启动在服务之前启动。
而且,即使服务是从操作系统的角度启动的,也不代表它已经完成了初始化。
实现您想要的唯一可靠方法是从应用程序到服务进行通信,例如从服务查询一些数据、获取同步对象等。然后,如果服务可用,则应用程序继续。否则,根据应用程序,它要么等待一段时间并再次尝试通信,要么退出。
- 2 回答
- 0 关注
- 210 浏览
添加回答
举报