gpt4 book ai didi

.net - Windows 服务 - 在 "path to executable"中提供参数

转载 作者:行者123 更新时间:2023-12-01 13:06:13 25 4
gpt4 key购买 nike

我不知道如何在启动时将(常量)参数传递到我的 Windows 服务中。我正在使用 ServiceBase 等标准 .NET 类来实现(并使用 ServiceProcessInstaller 和 ServiceInstaller 来安装)我的服务。

在 Windows 服务属性对话框(安装后)的常规选项卡上,有一个“可执行文件路径”,我可以在其中看到一些标准 Windows 服务指定了命令行参数。 System.ServiceProcess.ServiceBase.OnStart 采用 string[] args,我认为这将使这些参数能够从 .NET 代码中访问。

ServiceProcessInstaller 或 ServiceInstaller 上是否有一些我可以设置的属性允许我将启动参数传递给我自己的服务,或者有人知道应该如何完成吗?

最佳答案

嗯,在你发帖后大约 10 个月,我遇到了同样的问题。阅读此线程和其他线程后,我决定查看 .NET Framework 在幕后做了什么,并确认没有记录在案的方法来执行此操作。有;但是,这是一种非常简单的未记录的方法。在父 Installer 类中,覆盖 Install 方法,或实现 BeforeInstall 事件。无论哪种方式,您都可以使用以下任一方式:

public override void Install(System.Collections.IDictionary stateSaver)
{
base.Install(stateSaver);

base.Context.Parameters["assemblyPath"] = string.Format("\"{0}\" /service", base.Context.Parameters["assemblyPath"]);
}

或:

private void Installer_BeforeInstall(object sender, InstallEventArgs e)
{
base.Context.Parameters["assemblyPath"] = string.Format("\"{0}\" /service", base.Context.Parameters["assemblyPath"]);
}

“assemblyPath”参数将使用 AssemblyInstaller 类中可执行文件的完整路径进行初始化。此参数的值写入注册表中的 ImagePath 值。如果不存在,引号将围绕该值放置,因此请确保将它们放置在您需要的位置(即至少在初始值周围)。在上面的行中,我在执行文件路径周围放置了引号,并在末尾添加了“/service”作为参数。

这将适用于使用该父安装程序类的所有服务。如果您有不想添加参数或需要不同参数的服务,您可以嵌套安装程序类并将代码放在这些而不是根安装程序类上。这在任何地方都没有记录,将来可能会中断,并且可能不适用于 .NET Framework 的非 Microsoft 版本,但它目前确实有效。

希望对您有所帮助。

关于.net - Windows 服务 - 在 "path to executable"中提供参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2990036/

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