Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过窗口服务调用控制台应用程序_C# - Fatal编程技术网

C# 通过窗口服务调用控制台应用程序

C# 通过窗口服务调用控制台应用程序,c#,C#,我有一个窗口服务,它正在我的机器上运行。我在同一个解决方案中有单独的控制台应用程序,它正在执行某些功能。为了访问控制台应用程序的功能,我添加了控制台应用程序的*.exe文件作为对窗口服务项目的引用 public void OnTimer(object sender, System.Timers.ElapsedEventArgs args) { // TODO: Insert monitoring activities here. EventLog.WriteEntry("Mo

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

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),并从同一解决方案中的两个应用程序引用它