【问题标题】:Pass Parameters to Main(string[] args) of Windows Services将参数传递给 Windows 服务的 Main(string[] args)
【发布时间】:2015-05-25 09:15:09
【问题描述】:

我需要将参数传递给windows服务的Main(string[] args),我可以通过使用服务的属性将参数传递给void OnStart(string[] args)

How to pass parameters to Windows Service?

示例代码:

static void Main(string[] args)////How to pass args to this function
{
//// some code
}
protected override void OnStart(string[] args)////by using above link i can pass parameters to this function
{
////some code
}

注意:我使用项目属性将参数传递给 main(),但它无法实时提供帮助。

这是正确的做法吗,因为我找不到任何相关信息?

编辑 1:

我参考了这个How to pass parameters in windows service from Installer to Main function in Program.cs?,但我没有得到太多信息,为什么我们不能通过?

编辑 2:

我的目标是将 Raygun 密钥传递给 Main(String[] args) 然后将错误记录到 Raygun 网站,因此它会根据密钥将错误记录到特定版本。所以我需要将 Raygun 密钥动态传递给服务,我可以通过服务属性传递密钥,然后它只会记录 onstart(...) 级别,所以如果在 main() 级别处理任何异常我不能登录。所以我需要在主方法级别或服务启动时初始化以下代码

_raygunClient = new RaygunClient("Dynamic_Key");

服务将随时手动启动以进行开发。

【问题讨论】:

  • 你不能,除非改变服务的图像路径。可执行文件首先启动 (main()),然后服务控制管理器请求服务启动 (OnStart())。为什么要使用main(),如果需要,为什么不简单地更改图像路径?
  • 为什么链接的副本没有回答您的问题?
  • 那个答案主要集中在如何将参数传递给 onstart() 方法。唯一对我有帮助的一点,从那个答案是“在 OnStart 方法中处理服务的初始化参数,而不是在Main 方法”,那么这种情况就没有办法了?
  • @CodeCaster 目前我正在支持项目中工作,所以我不想更改现有代码,例如通过服务属性传递参数,因为它们已经从几年前传递了一些参数,如果我现在更改它将创建一些额外的工作。

标签: c# .net service windows-services


【解决方案1】:

将 Raygun 密钥作为 commandline arguments 传递。在安装时设置密钥。不需要动态参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-04
    • 2014-06-13
    • 1970-01-01
    • 2013-07-23
    • 2023-03-14
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多