From 4351854754042df479c7ed6b07ea17d2b13ef8d0 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Wed, 25 Mar 2026 10:57:18 -0400 Subject: [PATCH] =?UTF-8?q?Fix=20service=20deployment:=20set=20working=20d?= =?UTF-8?q?irectory=20for=20correct=20log=20paths=20and=20use=20MasterNode?= =?UTF-8?q?Manager=20for=20Objects=E2=86=92ZB=20reference?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Windows services default to System32 as working directory, causing logs to land in the wrong location. Set Environment.CurrentDirectory to AppDomain.CurrentDomain.BaseDirectory before Serilog init. Also fix ZB root folder not appearing under Objects folder — BuildAddressSpace runs after CreateAddressSpace completes so the externalReferences dict is already consumed; use Server.NodeManager.AddReferences instead. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/ZB.MOM.WW.LmxOpcUa.Host/OpcUa/LmxNodeManager.cs | 13 +++++++++---- src/ZB.MOM.WW.LmxOpcUa.Host/Program.cs | 4 ++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/ZB.MOM.WW.LmxOpcUa.Host/OpcUa/LmxNodeManager.cs b/src/ZB.MOM.WW.LmxOpcUa.Host/OpcUa/LmxNodeManager.cs index 6851aec..210a82f 100644 --- a/src/ZB.MOM.WW.LmxOpcUa.Host/OpcUa/LmxNodeManager.cs +++ b/src/ZB.MOM.WW.LmxOpcUa.Host/OpcUa/LmxNodeManager.cs @@ -85,12 +85,17 @@ namespace ZB.MOM.WW.LmxOpcUa.Host.OpcUa rootFolder.NodeId = new NodeId("ZB", NamespaceIndex); rootFolder.AddReference(ReferenceTypeIds.Organizes, true, ObjectIds.ObjectsFolder); - // Add reverse reference from Objects folder to our root - var extRefs = _externalReferences ?? new Dictionary>(); - AddExternalReference(ObjectIds.ObjectsFolder, ReferenceTypeIds.Organizes, false, rootFolder.NodeId, extRefs); - AddPredefinedNode(SystemContext, rootFolder); + // Add reverse reference from Objects folder → ZB root. + // BuildAddressSpace runs after CreateAddressSpace completes, so the + // externalReferences dict has already been consumed by the core node manager. + // Use MasterNodeManager.AddReferences to route the reference correctly. + Server.NodeManager.AddReferences(ObjectIds.ObjectsFolder, new List + { + new NodeStateReference(ReferenceTypeIds.Organizes, false, rootFolder.NodeId) + }); + // Create nodes for each object in hierarchy var nodeMap = new Dictionary(); diff --git a/src/ZB.MOM.WW.LmxOpcUa.Host/Program.cs b/src/ZB.MOM.WW.LmxOpcUa.Host/Program.cs index 61473d4..4aa9367 100644 --- a/src/ZB.MOM.WW.LmxOpcUa.Host/Program.cs +++ b/src/ZB.MOM.WW.LmxOpcUa.Host/Program.cs @@ -8,6 +8,10 @@ namespace ZB.MOM.WW.LmxOpcUa.Host { static int Main(string[] args) { + // Set working directory to exe location so relative log paths resolve correctly + // (Windows services default to System32) + Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory; + Log.Logger = new LoggerConfiguration() .MinimumLevel.Information() .WriteTo.Console()