Fix service deployment: set working directory for correct log paths and use MasterNodeManager for Objects→ZB reference
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) <noreply@anthropic.com>
This commit is contained in:
@@ -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<NodeId, IList<IReference>>();
|
||||
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<IReference>
|
||||
{
|
||||
new NodeStateReference(ReferenceTypeIds.Organizes, false, rootFolder.NodeId)
|
||||
});
|
||||
|
||||
// Create nodes for each object in hierarchy
|
||||
var nodeMap = new Dictionary<int, NodeState>();
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user