通过Window Service调用控制台应用程序

时间:2017-09-13 06:42:22

标签: c#

我有一个在我的机器上运行的Window Service。我在执行某些功能的同一解决方案中有单独的控制台应用程序。为了访问控制台应用程序的功能,我添加了控制台应用程序的* .exe文件作为Window Service项目的引用。

public void OnTimer(object sender, System.Timers.ElapsedEventArgs args)
{
    // TODO: Insert monitoring activities here.  
    EventLog.WriteEntry("Monitoring the System", EventLogEntryType.Information);
    string[] arr = new string[] { };
    ConsoleApplication.Program.Main(null);
}

如果我直接运行Visual Studio,则控制台应用程序可以正常运行。但是,如果我从Window Service调用Main()方法,我会得到一个空指针异常。

public static void Main(string[] args)
{
    try
    {
       //CODE BREAKS HERE ON READING FROM CONFIG FILE
        string genesis_sel= ConfigurationSettings.AppSettings["genesis_sel"].ToString();
    }
    catch (Exception ex)
    {
       //Exception code
    }
}

下面是在Visual Studio中运行的控制台应用程序项目的快照。

enter image description here

我不确定在从Window服务访问main方法时导致代码中断的原因。

有什么建议吗?

更新:添加了配置文件的快照。我不相信这是配置文件中的rad访问问题,因为当我单独运行控制台应用程序时它正确读取。当我通过窗口Service访问它时出现初始化问题。

enter image description here

UPDATE 使用单个事件日志替换main方法,但仍然获得相同的异常。 enter image description here

1 个答案:

答案 0 :(得分:1)

当您调用该方法时,它将作为您服务的一部分运行,因此它使用您服务中的环境和设置。这意味着您应该在服务项目的AppSettings中拥有正确的数据。为了更加清晰:在这种情况下,函数Mainservice的一部分,而不是单独的应用程序根。

否则,您可以将控制台作为单独的进程运行,但在这种情况下,您将丢失部分控制功能。

我建议,在一个单独的项目/ dll中分离通用逻辑并从中调用函数,它会更干净而且不会那么混乱