C# 通过窗口服务调用控制台应用程序
我有一个窗口服务,它正在我的机器上运行。我在同一个解决方案中有单独的控制台应用程序,它正在执行某些功能。为了访问控制台应用程序的功能,我添加了控制台应用程序的*.exe文件作为对窗口服务项目的引用C# 通过窗口服务调用控制台应用程序,c#,C#,我有一个窗口服务,它正在我的机器上运行。我在同一个解决方案中有单独的控制台应用程序,它正在执行某些功能。为了访问控制台应用程序的功能,我添加了控制台应用程序的*.exe文件作为对窗口服务项目的引用 public void OnTimer(object sender, System.Timers.ElapsedEventArgs args) { // TODO: Insert monitoring activities here. EventLog.WriteEntry("Mo
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);
}
如果我直接运行VisualStudio,控制台应用程序可以完美地运行。但是,如果我从窗口服务调用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
}
}
下面是在VisualStudio中运行的控制台应用程序项目的快照
我不确定是什么导致代码在从窗口服务访问main方法时中断
有什么建议吗
更新:添加了配置文件的快照。我不认为这是配置文件中的rad访问问题,因为当我单独运行console应用程序时,它读取正确。当我通过窗口服务访问它时,存在初始化问题
UPDATE用单个事件日志替换了main方法,但仍然得到相同的异常。
当您调用作为服务一部分运行的方法时,它将使用服务中的环境和设置。这意味着您的服务项目的
AppSettings
中应该有正确的数据。为了更加清晰:在这种情况下,函数Main
是服务的一部分,而不是单独的应用程序根目录
否则,您可以将控制台作为单独的进程运行,但在这种情况下,您将失去部分控制功能
我建议,在一个单独的项目/dll中分离公共逻辑并调用其中的函数,这样会更干净,不会如此混乱看起来像配置键,genesis_sel
及其值在windows服务的应用程序设置中丢失。你能共享你的配置文件吗?@ashin Nope,我不认为so@aaronR那样做了。看一看。这个问题似乎与引用的问题不一样。我用事件日志替换了配置代码,但在运行窗口服务“null异常”时抛出了相同的错误。我认为这与初始化有关。不知何故,当通过窗口服务调用时,这些值并没有初始化,而当作为控制台应用程序运行时,它们是初始化的。你的想法是什么?我建议,在一个单独的项目/dll中分离公共逻辑,并从中调用函数,这样会更干净,不会混淆Windows服务和控制台应用程序是同一个解决方案文件中的单独项目。所有逻辑都在从服务调用的控制台项目中,我的意思是创建一个逻辑项目(.dll),并从同一解决方案中的两个应用程序引用它