Welcome Guest Search | Active Topics | Sign In | Register

Error 193 Options
Seges Innovation P/S
Posted: Wednesday, March 7, 2018 6:54:01 AM
Rank: Newbie
Groups: Member

Joined: 3/7/2018
Posts: 4
We recently implemented EO in a large WPF solution. The application is used by 4500+ users and I traversed logs from last week, and we probably have 20 affected user last week with this error. We are getting an exception, whenever we try to use the EO component - message: "Failed to create child process, Win32 Error: 193".

Facts
- We use EO WPF Browser v17.3.13
- Supported from .NET 4.6.2 and onwards
- Deployed with Squirrel for Windows for all users and all users using same version of the application.
- EnableEOWP=True
- DisableGPU = False



Facts regarding users affected:
- Various Operting Systems from Windows 7 to Windows 10
- Both 32bit and 64bit
- Since these are personal desktops, users have various applications installed alongside. No similarities regarding virus scanners, firewalls etc.
- We have had a couple of remote sessions to effected users, and both had .NET 4.7.1 installed.
- The error is consequent.
- When copying the installed application from the error prone desktop, to my desktop solves the problem. Hence indicating the the assemblies/executable is not tampered with or corrupted.

I've attached to the process and captured first change exceptions, to see if any caught exceptions would give any indications. However only the following stacktrace :

Quote:
{
"Depth": 0,
"ClassName": "System.Exception",
"Message": "Failed to create child process, Win32 Error: 193",
"Source": "EO.Base",
"StackTraceString": " at EO.Internal.jn.a(Exception A_0, Boolean A_1)\r\n at EO.Internal.jn.a(Int32 A_0, String A_1, Boolean A_2)\r\n at EO.Internal.jn.f..ctor(jn A_0, String A_1, String A_2)\r\n at EO.Internal.jn.a(j A_0, azz A_1, String A_2, String A_3)\r\n at EO.Internal.jn.a(Boolean& A_0, a9v[] A_1, String A_2, String A_3)\r\n at EO.Internal.jn.a(a9v[] A_0, String A_1, String A_2)\r\n at EO.Internal.jn.o.c()\r\n at EO.Internal.jn.o.f()\r\n at EO.Internal.jn.n()\r\n at EO.Internal.jn.a(Boolean& A_0, a9v[] A_1, String A_2, String A_3)\r\n at EO.Internal.jn.a(a9v[] A_0, String A_1, String A_2)\r\n at EO.Internal.av2.b()\r\n at EO.Internal.av2.a(WindowsIdentity A_0)\r\n at EO.WebEngine.Engine.Start(WindowsIdentity user)\r\n at EO.Internal.av2.d()\r\n at EO.Internal.cr..ctor(WebView A_0)\r\n at EO.WebBrowser.WebView.x()\r\n at EO.WebBrowser.WebView.a(IntPtr A_0, Boolean A_1)\r\n at EO.Wpf.WebViewHost.a.a(HandleRef A_0)\r\n at System.Windows.Interop.HwndHost.BuildWindow(HandleRef hwndParent)\r\n at System.Windows.Interop.HwndHost.BuildOrReparentWindow()\r\n at System.Windows.Interop.HwndHost.OnSourceChanged(Object sender, SourceChangedEventArgs e)\r\n at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)\r\n at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)\r\n at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)\r\n at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)\r\n at System.Windows.PresentationSource.UpdateSourceOfElement(DependencyObject doTarget, DependencyObject doAncestor, DependencyObject doOldParent)\r\n at System.Windows.PresentationSource.OnVisualAncestorChanged(DependencyObject uie, AncestorChangedEventArgs e)\r\n at System.Windows.UIElement.OnVisualAncestorChanged(Object sender, AncestorChangedEventArgs e)\r\n at System.Windows.Media.Visual.ProcessAncestorChangedNotificationRecursive(DependencyObject e, AncestorChangedEventArgs args)\r\n at System.Windows.Media.Visual.AddVisualChild(Visual child)\r\n at System.Windows.Controls.Decorator.set_Child(UIElement value)\r\n at EO.Wpf.WebViewHost.OnApplyTemplate()\r\n at System.Windows.FrameworkElement.ApplyTemplate()\r\n at System.Windows.FrameworkElement.MeasureCore(Size availableSize)\r\n at System.Windows.UIElement.Measure(Size availableSize)\r\n at System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)\r\n at System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV, Boolean& hasDesiredSizeUChanged)\r\n at System.Windows.Controls.Grid.MeasureOverride(Size constraint)\r\n at System.Windows.FrameworkElement.MeasureCore(Size availableSize)\r\n at System.Windows.UIElement.Measure(Size availableSize)\r\n at MS.Internal.Helper.MeasureElementWithSingleChild(UIElement element, Size constraint)\r\n at System.Windows.Controls.ContentPresenter.MeasureOverride(Size constraint)\r\n at System.Windows.FrameworkElement.MeasureCore(Size availableSize)\r\n at System.Windows.UIElement.Measure(Size availableSize)\r\n at System.Windows.Controls.Border.MeasureOverride(Size constraint)\r\n at System.Windows.FrameworkElement.MeasureCore(Size availableSize)\r\n at System.Windows.UIElement.Measure(Size availableSize)\r\n at System.Windows.Controls.Control.MeasureOverride(Size constraint)\r\n at System.Windows.FrameworkElement.MeasureCore(Size availableSize)\r\n at System.Windows.UIElement.Measure(Size availableSize)\r\n at System.Windows.Controls.Grid.MeasureOverride(Size constraint)\r\n at System.Windows.FrameworkElement.MeasureCore(Size availableSize)\r\n at System.Windows.UIElement.Measure(Size availableSize)\r\n at MS.Internal.Helper.MeasureElementWithSingleChild(UIElement element, Size constraint)\r\n at System.Windows.Controls.ContentPresenter.MeasureOverride(Size constraint)\r\n at System.Windows.FrameworkElement.MeasureCore(Size availableSize)\r\n at System.Windows.UIElement.Measure(Size availableSize)\r\n at System.Windows.Documents.AdornerDecorator.MeasureOverride(Size constraint)\r\n at System.Windows.FrameworkElement.MeasureCore(Size availableSize)\r\n at System.Windows.UIElement.Measure(Size availableSize)\r\n at System.Windows.Controls.Grid.MeasureOverride(Size constraint)\r\n at System.Windows.FrameworkElement.MeasureCore(Size availableSize)\r\n at System.Windows.UIElement.Measure(Size availableSize)\r\n at System.Windows.Controls.Border.MeasureOverride(Size constraint)\r\n at System.Windows.FrameworkElement.MeasureCore(Size availableSize)\r\n at System.Windows.UIElement.Measure(Size availableSize)\r\n at System.Windows.Window.MeasureOverrideHelper(Size constraint)\r\n at System.Windows.Window.MeasureOverride(Size availableSize)\r\n at System.Windows.FrameworkElement.MeasureCore(Size availableSize)\r\n at System.Windows.UIElement.Measure(Size availableSize)\r\n at System.Windows.Interop.HwndSource.SetLayoutSize()\r\n at System.Windows.Interop.HwndSource.set_RootVisualInternal(Visual value)\r\n at System.Windows.Window.SetRootVisual()\r\n at System.Windows.Window.SetRootVisualAndUpdateSTC()\r\n at System.Windows.Window.SetupInitialState(Double requestedTop, Double requestedLeft, Double requestedWidth, Double requestedHeight)\r\n at System.Windows.Window.CreateSourceWindow(Boolean duringShow)\r\n at System.Windows.Window.ShowHelper(Object booleanBox)\r\n at Systematic.DMS.DMSPortal.Public.DialogService.ShowWindow(IDialogView windowView, Nullable`1 width, Nullable`1 height, String title, Boolean maximized)\r\n at Systematic.DMS.Infrastructure.Mvvm.MvvmManager.ShowWindow[TDialogWindow,TDialogViewModel](Action`1 configure, Nullable`1 width, Nullable`1 height, String title, Boolean maximized, String name)\r\n at ListReportsConcept.UIL.Report.ReportManager.ShowReportWindowOrPrint(String title, Action`1 initializer)\r\n at System.Collections.Generic.List`1.ForEach(Action`1 action)\r\n at Systematic.CommonCode.Ui.Utilities.DispatcherWrapper.<>c__DisplayClass12_0`1.<PerformAsyncWorkAndUpdateUi>b__3(List`1 uiActions)\r\n at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)\r\n at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)",
"RemoteStackTraceString": null,
"RemoteStackIndex": 0,
"ExceptionMethod": {
"Name": "a",
"AssemblyName": "EO.Base",
"AssemblyVersion": "17.3.13.0",
"ClassName": "EO.Internal.jn",
"Signature": "Void a(System.Exception, Boolean)",
"MemberType": 8
},
"HResult": -2146233088,
"HelpURL": null
}


Questions:
1 - Anyway to change logging verbosity to troubleshoot this issue?
2 - In terms of identifying the exact impact of our user base, we need to catch this exception - do you have any information of how to catch this exception from the UI thread?
3 - How do you suggest we proceed troubleshooting this issue?
eo_support
Posted: Wednesday, March 7, 2018 9:21:07 AM
Rank: Administration
Groups: Administration

Joined: 5/27/2007
Posts: 24,221
Hi,

You should be able to catch this exception through this event:

https://www.essentialobjects.com/doc/eo.base.runtime.exception.aspx

However this does not guarantee that it will be in UI thread. So you will need to have additional code to switch to UI thread if needed.

Error code 193 means ERROR_BAD_EXE_FORMAT and the error code is returned by Windows API CreateProcess. Without looking into your systems, we do not know how this occurred for sure. We would suggest you to distribute eowp.exe along with your application with your own customized name and see if that resolves the issue for you. Specifically, you can follow these steps:

1. Copy eowp.exe from our installation folder into your application folder;
2. Rename eowp.exe to any name that can be more friendly to your user. For example, you can rename it to ChildLauncher.exe;
3. Call this method in your application starting up code:

https://www.essentialobjects.com/doc/eo.base.runtime.initworkerprocessexecutable.aspx

Make sure you pass the full path of the pre-installed copy of eowp.exe to this method. This will avoid our library from dynamically creating eowp.exe, which is the default behavior. Using the above step will replace this default behavior with a static copy of eowp.exe throughout, and because eowp.exe is digitally signed, you can easily verify whether the file has been tampered with any time by checking its digital certificate.

If you want to troubleshoot the original issue further, you can ask the user to send you a copy of the dynamically created eowp.exe and you can forward it to us so that we can look into it. By default, the file is in the user's temp directory and it should have the name of eowp.version.exe. For example, for 17.3.13, it would be eowp.17.3.13.0.exe.

Hope this helps. Please let us know how it goes.

Thanks!
Seges Innovation P/S
Posted: Thursday, March 8, 2018 5:14:23 AM
Rank: Newbie
Groups: Member

Joined: 3/7/2018
Posts: 4
Hi,

Excellent with the exception event - we'll try it out. It's mostly to be able to identify all affected users.

Regarding eowp.exe, we are distributing this with the application and we are not dynamically creating a new one at runtime, due to conflicts with various virus scanners. So I'm not sure what the provided steps will help in this case.

One thing we do not do, is call the InitWorkerProcessExecutable function on the existing distributed eowp.exe file - what exactly will this do?

Would it be possible to setup a conference meeting and discuss how to approach this issue with you guys?

Thanks in advance!
eo_support
Posted: Thursday, March 8, 2018 3:38:19 PM
Rank: Administration
Groups: Administration

Joined: 5/27/2007
Posts: 24,221
Hi,

What I meant by "calling InitWorkerProcessExecutable function on the existing distributed eowp.exe" is make sure the path you passed to InitWorkerProcessExecutable exactly matches the path of your pre-installed eowp.exe. For example, if you install eowp.exe as "c:\YourApplication\ChildProcessLancher.exe", then that should be path you pass to InitWorkerProcessExecutable. The idea is avoid this file being dynamically created.

As to conference, we can remotely connects to the computer that you have problems with to troubleshoot further (use RDP or TeamViewer). Based on our experience, merely voice conference without being able to actually see/debug the problem are usually not effective to resolve the issue. So if you are open to give us access to a system that can demonstrate the problem, we can schedule it and see what we can find.

Thanks!
Seges Innovation P/S
Posted: Friday, March 9, 2018 2:37:14 AM
Rank: Newbie
Groups: Member

Joined: 3/7/2018
Posts: 4
Ok - let's set this up. I'll PM you.


You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.