我有一个在我的机器上运行的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中运行的控制台应用程序项目的快照。
我不确定在从Window服务访问main方法时导致代码中断的原因。
有什么建议吗?
更新:添加了配置文件的快照。我不相信这是配置文件中的rad访问问题,因为当我单独运行控制台应用程序时它正确读取。当我通过窗口Service访问它时出现初始化问题。
答案 0 :(得分:1)
当您调用该方法时,它将作为您服务的一部分运行,因此它使用您服务中的环境和设置。这意味着您应该在服务项目的AppSettings
中拥有正确的数据。为了更加清晰:在这种情况下,函数Main
是service
的一部分,而不是单独的应用程序根。
否则,您可以将控制台作为单独的进程运行,但在这种情况下,您将丢失部分控制功能。
我建议,在一个单独的项目/ dll中分离通用逻辑并从中调用函数,它会更干净而且不会那么混乱