我有一个使用 TopShelf 库的 Windows 服务应用程序,我在 cfn-init 期间使用您从 topshelf 获得的方便的命令行功能将它安装在 AWS 中。
C:\handy_service\> HandyService.exe install start
这基本上将服务安装在注册表中,然后调用sc start
,但它非常有用,因为它检查服务名称是否与您期望的匹配,并且它允许您配置服务将运行的用户使用漂亮的流式 API。
如果服务配置为一般使用 NLog,安装程序代码还会将一些诊断日志写入 NLog。
问题是这样的:安装程序作为 AMI 启动的默认本地管理员帐户运行,并且 NLog 文件由该用户创建。当服务作为网络服务用户启动时,它没有写入 NLog 日志文件的权限。
如何让我的服务写入日志文件?我考虑过以编程方式设置权限,但它看起来很讨厌,我必须确定日志文件名,因为它是根据 ec2 实例 ID 动态生成的。此外,第一次创建日志文件的时间也不是很明显。我可能会采用的最简单的方法是拥有两个 NLog.config,并在刷新记录器后在安装结束时切换一个。但是因为在服务启动和安装程序退出之间存在一些时间重叠,我预计我会在这里丢失几行日志记录。
任何干净的建议将不胜感激!