Online Forums
Technical support is provided through Support Forums below. Anybody can view them; you need to Register/Login to our site (see links in upper right corner) in order to Post questions. You do not have to be a licensed user of our product.
Please read Rules for forum posts before reporting your issue or asking a question. OPC Labs team is actively monitoring the forums, and replies as soon as possible. Various technical information can also be found in our Knowledge Base. For your convenience, we have also assembled a Frequently Asked Questions page.
Do not use the Contact page for technical issues.
LogEntry event return nothing
The manual method should work, however. Below is part of our installer code (in Inno Setup) which takes care of the same thing, so you can compare it with what you have done:
[Run]
; QuickOPC-COM
; Keep the assemblies sorted in dependency order bottom to top, in order to prevent creation of unwanted additional TLBs.
FileName: "{dotnet40}\RegAsm.exe"; Parameters: """{app}\Assemblies\net452\OpcLabs.BaseLib.dll"" /codebase /tlb:""{app}\Lib\OpcLabs.BaseLib.tlb"""; StatusMsg: "Registering OpcLabs.BaseLib assembly for COM interop..."; Components: comcomponents or devlibs; Flags: runhidden; Check: DotNetFx45InstalledCheck;
FileName: "{dotnet4064}\RegAsm.exe"; Parameters: """{app}\Assemblies\net452\OpcLabs.BaseLib.dll"" /codebase /tlb:""{app}\Lib\x64\OpcLabs.BaseLib.tlb"""; StatusMsg: "Registering OpcLabs.BaseLib assembly for COM interop..."; Components: comcomponents or devlibs; Flags: runhidden; Check: DotNetFx45InstalledCheck and IsWin64;
FileName: "{dotnet40}\RegAsm.exe"; Parameters: """{app}\Assemblies\net452\OpcLabs.BaseLibForms.dll"" /codebase /tlb:""{app}\Lib\OpcLabs.BaseLibForms.tlb"""; StatusMsg: "Registering OpcLabs.BaseLibForms assembly for COM interop..."; Components: comcomponents or devlibs; Flags: runhidden; Check: DotNetFx45InstalledCheck;
FileName: "{dotnet4064}\RegAsm.exe"; Parameters: """{app}\Assemblies\net452\OpcLabs.BaseLibForms.dll"" /codebase /tlb:""{app}\Lib\x64\OpcLabs.BaseLibForms.tlb"""; StatusMsg: "Registering OpcLabs.BaseLibForms assembly for COM interop..."; Components: comcomponents or devlibs; Flags: runhidden; Check: DotNetFx45InstalledCheck and IsWin64;
FileName: "{dotnet40}\RegAsm.exe"; Parameters: """{app}\Assemblies\net452\OpcLabs.EasyOpcClassicInternal.dll"" /codebase /tlb:""{app}\Lib\OpcLabs.EasyOpcClassicInternal.tlb"""; StatusMsg: "Registering OpcLabs.EasyOpcClassicInternal assembly for COM interop..."; Components: comcomponents or devlibs; Flags: runhidden; Check: DotNetFx45InstalledCheck;
FileName: "{dotnet4064}\RegAsm.exe"; Parameters: """{app}\Assemblies\net452\OpcLabs.EasyOpcClassicInternal.dll"" /codebase /tlb:""{app}\Lib\x64\OpcLabs.EasyOpcClassicInternal.tlb"""; StatusMsg: "Registering OpcLabs.EasyOpcClassicInternal assembly for COM interop..."; Components: comcomponents or devlibs; Flags: runhidden; Check: DotNetFx45InstalledCheck and IsWin64;
FileName: "{dotnet40}\RegAsm.exe"; Parameters: """{app}\Assemblies\net452\OpcLabs.EasyOpcClassic.dll"" /codebase /tlb:""{app}\Lib\OpcLabs.EasyOpcClassic.tlb"""; StatusMsg: "Registering OpcLabs.EasyOpcClassic assembly for COM interop..."; Components: comcomponents or devlibs; Flags: runhidden; Check: DotNetFx45InstalledCheck;
FileName: "{dotnet4064}\RegAsm.exe"; Parameters: """{app}\Assemblies\net452\OpcLabs.EasyOpcClassic.dll"" /codebase /tlb:""{app}\Lib\x64\OpcLabs.EasyOpcClassic.tlb"""; StatusMsg: "Registering OpcLabs.EasyOpcClassic assembly for COM interop..."; Components: comcomponents or devlibs; Flags: runhidden; Check: DotNetFx45InstalledCheck and IsWin64;
FileName: "{dotnet40}\RegAsm.exe"; Parameters: """{app}\Assemblies\net452\OpcLabs.EasyOpcClassicForms.dll"" /codebase /tlb:""{app}\Lib\OpcLabs.EasyOpcClassicForms.tlb"""; StatusMsg: "Registering OpcLabs.EasyOpcClassicForms assembly for COM interop..."; Components: comcomponents or devlibs; Flags: runhidden; Check: DotNetFx45InstalledCheck;
FileName: "{dotnet4064}\RegAsm.exe"; Parameters: """{app}\Assemblies\net452\OpcLabs.EasyOpcClassicForms.dll"" /codebase /tlb:""{app}\Lib\x64\OpcLabs.EasyOpcClassicForms.tlb"""; StatusMsg: "Registering OpcLabs.EasyOpcClassicForms assembly for COM interop..."; Components: comcomponents or devlibs; Flags: runhidden; Check: DotNetFx45InstalledCheck and IsWin64;
FileName: "{dotnet40}\RegAsm.exe"; Parameters: """{app}\Assemblies\net452\OpcLabs.EasyOpcUA.dll"" /codebase /tlb:""{app}\Lib\OpcLabs.EasyOpcUA.tlb"""; StatusMsg: "Registering OpcLabs.EasyOpcUA assembly for COM interop..."; Components: comcomponents or devlibs; Flags: runhidden; Check: DotNetFx45InstalledCheck;
FileName: "{dotnet4064}\RegAsm.exe"; Parameters: """{app}\Assemblies\net452\OpcLabs.EasyOpcUA.dll"" /codebase /tlb:""{app}\Lib\x64\OpcLabs.EasyOpcUA.tlb"""; StatusMsg: "Registering OpcLabs.EasyOpcUA assembly for COM interop..."; Components: comcomponents or devlibs; Flags: runhidden; Check: DotNetFx45InstalledCheck and IsWin64;
FileName: "{dotnet40}\RegAsm.exe"; Parameters: """{app}\Assemblies\net452\OpcLabs.EasyOpcUAForms.dll"" /codebase /tlb:""{app}\Lib\OpcLabs.EasyOpcUAForms.tlb"""; StatusMsg: "Registering OpcLabs.EasyOpcUAForms assembly for COM interop..."; Components: comcomponents or devlibs; Flags: runhidden; Check: DotNetFx45InstalledCheck;
FileName: "{dotnet4064}\RegAsm.exe"; Parameters: """{app}\Assemblies\net452\OpcLabs.EasyOpcUAForms.dll"" /codebase /tlb:""{app}\Lib\x64\OpcLabs.EasyOpcUAForms.tlb"""; StatusMsg: "Registering OpcLabs.EasyOpcUAForms assembly for COM interop..."; Components: comcomponents or devlibs; Flags: runhidden; Check: DotNetFx45InstalledCheck and IsWin64;
I now realize, however, that we also do one more thing: We temporarily place some additional assemblies to the disk. Those are the assemblies that are referenced by us internally, but we do not ship them separately - instead, we embed them as resources, in order to reduce the number of files that constitute the product. This works well in most cases, but some tools (including the assembly registration) sometimes require the referenced assemblies be physically present. Haven't your received any errors or warnings when registering?
In the upcoming version (release due in December) we will ship an additional, small installer just for production purposes.
And, we will also provide a ZIP file with these additional assemblies, in case somebody needs them (in the current version, you cannot easily get to them).
These changes may be a help in this as well.
Regards
Please Log in or Create an account to join the conversation.
- info@femto.ch
- Topic Author
- Offline
- Senior Member
- Posts: 4
- Thank you received: 0
I installed the Assemblies and the COM Components with QuickOPC installer. And I check "Install component assemblies into the GAC. This is normally neither necessary nor recommended".
Does that mean the manuel method for deployment does not work for me ? Or did I something wrong ?
Please Log in or Create an account to join the conversation.
I have not seen this issue before.
Can you try installing the QuickOPC on the production machine using the QuickOPC installer? You can select the Custom installation, and then just the parts that are needed - including the COM components. This way the registration would be done the same way as on your development machine, to rule out a problem with that part.
Thank you
Please Log in or Create an account to join the conversation.
- info@femto.ch
- Topic Author
- Offline
- Senior Member
- Posts: 4
- Thank you received: 0
C:\Windows\SysWOW64>cscript C:\Tmp\_EasyUAClient.SubscribeDataChange.Main.vbs
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation 1996-2001. Tous droits réservés.
Subscribing...
Processing monitored item changed events for 1 minute...
-1.075884E+24 {System.Single} @2016-11-16T12:39:28.704 @@2016-11-16T12:39:28.702
; Good
-2.590853E-31 {System.Single} @2016-11-16T12:39:29.719 @@2016-11-16T12:39:29.719
; Good
...
C:\Windows\SysWOW64>
Here is the result with the production machine :
C:\Windows\SysWOW64>cscript C:\Tmp\_EasyUAClient.SubscribeDataChange.Main.vbs
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation 1996-2001. Tous droits réservés.
Subscribing...
Processing monitored item changed events for 1 minute...
C:\Windows\SysWOW64>
Please Log in or Create an account to join the conversation.
I know the issue is with the Delphi part, but I'd really like to first see the result of the VBScript test. I suppose the reason why it gives the error is because you either registered the assemblies in the 32-bit world, and then running the VBScript from the 64-bit command line, or vice versa.
Can you please try running the VBScript from the environments with the same bitness as your Delphi app?
Thank you
Please Log in or Create an account to join the conversation.
- info@femto.ch
- Topic Author
- Offline
- Senior Member
- Posts: 4
- Thank you received: 0
For the deployment, I followed the manual method :
- Run the quickOPC installation program, production installation.
- Install our application.
- Copy the QuickOPC-UA assemblies.
- Perform assemblies registration with RegAsm :
- RegAsm.exe /codebase OpcLabs.BaseLib.dll
- RegAsm.exe /codebase OpcLabs.EasyOpcUA.dll
- RegAsm.exe /codebase OpcLabs.OpcComplexEventProcessing.dll
- RegAsm.exe /codebase OpcLabs.EasyOpcClassic.dll
- RegAsm.exe /codebase OpcLabs.EasyOpcClassicInternal.dll
- RegAsm.exe /codebase OpcLabs.EasyOpcClassicForms.dll
- RegAsm.exe /codebase OpcLabs.BaseLibForms.dll
- RegAsm.exe /codebase OpcLabs.EasyOpcUAForms.dll
The development machine is a Windows 7 Pro 64bit (Virtual Machine) and the production machine is a Windows 10 Entreprise 64bit. I also test a production machine with Windows 7 Pro 64bit. Our application is developped for the 32bits platforms.
The result of the VBScript example is : ActiveX component can't create object : 'OpcLabs.EasyOpc.UA.EasyUAClient'
Please Log in or Create an account to join the conversation.
Do I understand it correctly that the application basically "works" - it is just that no events reach the Delphi code?
Can you please describe the deployment process used? I assuming that you copied over the compiled application, and QuickOPC assemblies. What else have you done?
Have you registered the assemblies yourself (if so, please describe how), or have you used the QuickOPC setup program that does it for you?
Is the production machine 32-bit or 64-bit? And the development machine?
Which operating systems?
And, one final important thing: Can you please try out, on the production machine, some examples that also use the COM interface of QuickOPC, to see if events work with them? The easiest are the VBScript examples, under ExamplesCom\VBScript\WSH\UADocExamples - e.g. _EasyUAClient.SubscribeDataChange.Main.vbs .
Thank you, and best regards
Please Log in or Create an account to join the conversation.
- info@femto.ch
- Topic Author
- Offline
- Senior Member
- Posts: 4
- Thank you received: 0
The LogEntry event, as the EventNotification and the DataChangeNotification, return nothing on our deployed application. It work on the developpment PC but not on the PC on which deployed application. The reading and writting work without problem on the both PC. We check the .NET version, COM and DCOM services. With Wireshark we also see that there isn't any difference. Same number and type of frame in both developpment and deployed application. It looks like we have a problem in the communication between Delphi and COM.
Please help us.
Please Log in or Create an account to join the conversation.