C# 应用程序作为 Windows 服务无法正常运行

问题描述 投票:0回答:1

我正在使用 Topshelf 框架编写一个 C# 程序来创建 Windows 服务。该应用程序基本上搜索 .csv 文件中的数据并将其上传到网站,它工作得很好,并且它执行了在 Visual Studio 2022 中初始化时应该执行的操作,但是当我构建应用程序并将其安装为 Windows 服务时.

我在日志中收到此错误消息:

2024-04-23 13:36:33.704 +02:00 [ERR] 执行计划任务时出错:对象引用未设置到对象的实例。 System.NullReferenceException:未将对象引用设置为对象的实例。在 C:\Users 中的 ExchangeRateUpdater.HasValidDateRange(货币) 姓名\来源 epos\Autorestart\Program.cs: 第 138 行位于 System.Linq.Utilities.<>c__DisplayClass1_01.b__0(TSource x) 位于 System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext() 位于 System.Linq.Enumerable.WhereEnumerableIterator1.ToArray()在 System.Linq.Buffer1..ctor(IEnumerable1 源) 在 System.Linq.OrderedEnumerable1.ToArray(Int32 minIdx, Int32 maxIdx) 在 ExchangeRateUpdater.ExecuteScheduledTask(String accessToken) 在 C:\Users 姓名\来源 epos\Autorestart\Program.cs:第 79 行

完整代码在github上

Code snippets that the error is referring to

我想提一下,我是编程新手,这是我的第一个更大的项目,所以请仁慈一点:D

提前谢谢大家。

我尝试了很多事情,完全改变了代码,做了多个版本的程序,但它要么根本不起作用,要么最终出现这个错误。

c# .net windows-services topshelf
1个回答
0
投票

我在代码中没有看到太多问题,但是您可以检查一下在部署为 Windows 服务后是否可以读取 appSettings 值吗?我看到您登录的代码为

string chosenCountry = ConfigurationManager.AppSettings["chosenCountry"];
Log.Information($"Chosen country: {chosenCountry}");

请检查日志文件中是否有从配置文件中读取的值。如果没有,请尝试看看此代码片段是否有帮助

Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
AppSettingsSection appSettings = configuration.AppSettings;    
string timeToRun = appSettings.Settings["chosenCountry"].Value;
© www.soinside.com 2019 - 2024. All rights reserved.