我不知道如何在 Windows 服务启动时将(常量)参数传递给它。我使用标准 .NET 类(例如 ServiceBase)来实现(并使用 ServiceProcessInstaller 和 ServiceInstaller 来安装)我的服务。
在 Windows 服务属性对话框(安装后)的常规选项卡上,有一个“可执行文件的路径”,我可以在其中看到一些标准 Windows 服务指定了命令行参数。System.ServiceProcess.ServiceBase.OnStart
takes 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"]);
}
or:
private void Installer_BeforeInstall(object sender, InstallEventArgs e)
{
base.Context.Parameters["assemblyPath"] = string.Format("\"{0}\" /service", base.Context.Parameters["assemblyPath"]);
}
“ assemblyPath”参数将使用 AssemblyInstaller 类中可执行文件的完整路径进行初始化。该参数的值将写入注册表中的 ImagePath 值。如果不存在引号,则将在该值周围放置引号,因此请确保将它们放置在需要的位置(即至少在初始值周围)。在上面的行中,我在执行文件路径周围加了引号,并在末尾添加了“/service”作为参数。
这将适用于使用该父 Installer 类的所有服务。如果您不想添加参数或需要不同参数的服务,则可以嵌套 Installer 类并将代码放在这些服务上,而不是放在根 Installer 类上。这没有在任何地方记录,将来可能会中断,并且可能不适用于非 Microsoft 版本的 .NET Framework,但它目前确实可以工作。
我希望这有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)