• 0

Software won't run on Server 2016 - .NET Runtime Error


Question

I have a WD Sentinel DS server. It's an x86 NAS from WD - it comes with Server 2012R2 by default and a few other addons. I'm looking to update it to 2016, but I get an issue with a single addon - unfortunately it's one I would require to work. This addon adds AFP support, which means I can use it for TimeMachine on my OS X clients natively.

Although the addon is WD packaged, it looks like it was originally developed by Extremez-IP - a company which has since been bought out and there's not going to be an update released.

 

I can try to start the service, but a few seconds later it's stopped running and I get a few messages in the event log. Event 1026, .NET Runtime.

  Quote

 

Application: WDAfpSupport.exe

Framework Version: v4.0.30319

Description: The process was terminated due to an unhandled exception.

Exception Info: System.IO.FileNotFoundException

   at WDAfpSupport.WDAfpSupportService.IsEZIPInstalled(System.String ByRef)

   at WDAfpSupport.WDAfpSupportService.MonitorMacAccess()

   at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)

   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)

   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)

   at System.Threading.ThreadHelper.ThreadStart()


 

Expand  

And the XML view:

  Quote

- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> 

+ <System> 

<Provider Name=".NET Runtime" /> 

<EventID Qualifiers="0">1026</EventID> 

<Level>2</Level> 

<Task>0</Task> 

<Keywords>0x80000000000000</Keywords> 

<TimeCreated SystemTime="2018-01-14T14:26:25.946371600Z" /> 

<EventRecordID>608</EventRecordID> 

<Channel>Application</Channel> 

<Computer>TESTServer.TEST.local</Computer> 

<Security /> 

</System> 

+ <EventData> 

<Data>Application: WDAfpSupport.exe Framework Version: v4.0.30319 Description: The process was terminated due to an unhandled exception. Exception Info: System.IO.FileNotFoundException at WDAfpSupport.WDAfpSupportService.IsEZIPInstalled(System.String ByRef) at WDAfpSupport.WDAfpSupportService.MonitorMacAccess() at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) at System.Threading.ThreadHelper.ThreadStart()</Data> 

</EventData> 

</Event>

Expand  

Am I right in thinking I'm pretty much SOL here, and this could only be rectified by the original developers? I have tried to install all additional .NET components but I still don't get any luck in my test environment. 

 

Not only has the original developed been removed from the equation, but WD has dropped all support for this unit too. If anyone is particularly interested, I've put a copy of the AFP addon installer here: https://www.dropbox.com/s/cp0qgo6wgpzf6l4/WDAfpSupportSetup.msi?dl=0

7 answers to this question

Recommended Posts

  • 0

Yes - the dropbox link is the original installer msi file provided by WD. I've got the full recovery suite for this unit and that wim file includes all the original installers.

 

Regardless of whether I do a clean install or 2016, or upgrade 2012R2 the same fault occurs with this software.

  • 0

its not looking for an old .net thats not supplied is it?

 

2.5 or equiv, that was a ballache to install on 2k12, suspect much the same on 2k16. from memory MS guidance to install it doesnt work.  Struggling to remember how i managed to force it onto 2k12 though.

  • 0
  On 15/01/2018 at 13:19, Mando said:

its not looking for an old .net thats not supplied is it?

 

2.5 or equiv, that was a ballache to install on 2k12, suspect much the same on 2k16. from memory MS guidance to install it doesnt work.  Struggling to remember how i managed to force it onto 2k12 though.

Expand  

I don't think it is. On the standard 2012R2 (out of the WD factory) only .NET 4.5 is installed and it works as-is. This is the same as 2016 - I've even added the older .NET features using Server Manager on 2016 and it's still a no-go.

 

Is there any sort of debugging software that could work just from the binary (as no source code is available?). The XML suggests there's a file missing "Exception Info: System.IO.FileNotFoundException" but I've no experience at this whatsoever.

  • 0
  On 15/01/2018 at 13:29, Biohead said:

I don't think it is. On the standard 2012R2 (out of the WD factory) only .NET 4.5 is installed and it works as-is. This is the same as 2016 - I've even added the older .NET features using Server Manager on 2016 and it's still a no-go.

 

Is there any sort of debugging software that could work just from the binary (as no source code is available?). The XML suggests there's a file missing "Exception Info: System.IO.FileNotFoundException" but I've no experience at this whatsoever.

Expand  

hmm probs not that then.

 

and TBH no not really, if the vendor doesnt support it due to EOL or compatiblity reasons, id be walking away, i cant use bodges in a production environment sadly.

 

are there positive reasons for migrating from 2k12 r2 to 2016? I cant think of any, but im not on the coal face as it were.

  • 0

This may be a bit advanced but you could try to open the program in ILSpy and look for WDAfpSupport.WDAfpSupportService.IsEZIPInstalled(System.String ByRef) and try to see what it is looking for that is causing a FileNotFoundException.

 

Examples could be a FileInfo object that is initialized and then they call a method on that object without checking whether it exists, causing an unhandled exception. This won't fix your error but what it will do is potentially lead you to what is causing it and potentially, how to fix it.

 

It seems its looking to see if EZ IP is installed, whatever that is. Possibly another component.

  • 0

That's a really useful tool - it's been able to show me a lot more than I was expecting!


Just to try and clear things up, ExtremeZIP software was taken by Western Digital, and packaged up by them to create an OEM version they included with this server. It really does work well for AFP file sharing which is why I'd like to see if this is fixable. 2016 doesn't add that much so happy to stay with 2012R2, but it does have a few more Storage Pool capabilities... plus who doesn't like tinkering?!

 

It results in two services being installed, WDAFPSupport and ExtremeZIP (EZIP). It looks like the WDAFPSupport service is what controls this EZIP service (when to turn it on, what shares it should be accessing etc). If I run that service manually, it has it's own logfiles and there's nothing in them at all which would be unexpected. The EZIP service will stay started once it's manually done - it's the WDAFPSupport service which is the issue. 

 

I've been able to find the two sections in the WDAFPSupport.exe which are shown in the event log by using ILSpy and pasted them below.

 

I've also seen an info entry in the Application Log which I missed first time... although it looks like exception code 0xe0434352 is just the generic .NET fault code and doesn't help much in this case

  Quote

Faulting application name: WDAfpSupport.exe, version: 2.1.0.0, time stamp: 0x5355864e
Faulting module name: KERNELBASE.dll, version: 10.0.14393.321, time stamp: 0x57f4c4f0
Exception code: 0xe0434352
Fault offset: 0x0000000000017788
Faulting process id: 0x7b8
Faulting application start time: 0x01d38e39051c5619
Faulting application path: c:\Program Files\Western Digital\Western Digital AFP Support Service\WDAfpSupport.exe
Faulting module path: C:\WINDOWS\System32\KERNELBASE.dll
Report Id: f589232e-d508-43d7-8bed-a8185e341c5a
Faulting package full name:
Faulting package-relative application ID:

Expand  

 

In the case if the first section, it's referring to a string (A82379D3-E734-47B7-80F9-81A11CDFCD81) and I'm not sure what this relates to. I've tried searching the registry for it in 2012R2 and I can't find it, so I'm not sure where I should be looking - if at all. I'm not really sure where else it could be referring to a file which doesn't exist.

 

WDAfpSupport.WDAfpSupportService.IsEZIPInstalled(System.String ByRef)

private bool IsEZIPInstalled(out string version)
		{
			version = string.Empty;
			if (!string.IsNullOrEmpty("{A82379D3-E734-47B7-80F9-81A11CDFCD81}"))
			{
				try
				{
					foreach (ProductInstallation current in ProductInstallation.GetRelatedProducts("{A82379D3-E734-47B7-80F9-81A11CDFCD81}"))
					{
						if (current != null)
						{
							version = current.get_ProductVersion().ToString();
							break;
						}
					}
				}
				catch (SystemException ex)
				{
					Logger.Info(Logger.EventType.EVENT_AFP, "Exception when checking for installed version of ExtremeZ-IP: {0}", new object[]
					{
						ex.ToString()
					});
					version = string.Empty;
				}
			}
			return !string.IsNullOrEmpty(version);
		}

WDAfpSupport.WDAfpSupportService.MonitorMacAccess()

// WDAfpSupport.WDAfpSupportService
private void MonitorMacAccess()
{
	this.alertManager = AlertManager.GetInstance();
	this.GetIpSubnet();
	Thread.Sleep(10000);
	this.serialNumber = this.GetSerialNumber();
	this.modelDisplayName = this.GetModelDisplayName();
	string baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
	string fileName = baseDirectory + "ExtremeZ-IP Installer.exe";
	FileVersionInfo versionInfo = FileVersionInfo.GetVersionInfo(fileName);
	this.productVersion = versionInfo.ProductVersion;
	Logger.Info(Logger.EventType.EVENT_AFP, "Latest ExtremeZ-IP version is {0}", new object[]
	{
		this.productVersion
	});
	bool flag = this.IsEZIPInstalled(out this.installedVersion);
	if (flag)
	{
		this.alertManager.Clear("WDAfpSupportDAFPFailedActivation");
		this.alertManager.Clear("WDAfpSupportDAFPFailedInstallation");
		if (this.installedVersion.CompareTo(this.productVersion) < 0)
		{
			Logger.Info(Logger.EventType.EVENT_AFP, "ExtremeZ-IP version {0} has been previously installed.  Updating to version {1}.", new object[]
			{
				this.installedVersion,
				this.productVersion
			});
			flag = this.InstallEZIP();
		}
		else
		{
			Logger.Info(Logger.EventType.EVENT_AFP, "ExtremeZ-IP version {0} has been previously installed.", new object[]
			{
				this.installedVersion
			});
		}
	}
	if (!flag)
	{
		this.CreateDevicesManager();
		while (!this.activationRequestAccepted)
		{
			WDAfpSupportService.monitorMacAccessThreadEvent.WaitOne();
			bool flag2 = false;
			foreach (DeviceInfo current in WDAfpSupportService.devices)
			{
				OperatingSystemProperty operatingSystem = current.get_OperatingSystem();
				if (operatingSystem != null)
				{
					string text = operatingSystem.get_OSName().ToUpper();
					if (text.Contains("MAC OS X"))
					{
						Logger.Info(Logger.EventType.EVENT_AFP, "Device Name = {0}, Description = {1}, Id = {2}, OS Name = {3}, OS = {4}", new object[]
						{
							current.get_DeviceName(),
							current.get_Description(),
							current.get_DeviceId(),
							operatingSystem.get_OSName(),
							operatingSystem.ToString()
						});
						Logger.Info(Logger.EventType.EVENT_AFP, "A Mac client has been detected", new object[0]);
						flag2 = true;
						break;
					}
				}
			}
			if (flag2)
			{
				this.activationRequestAccepted = this.SendActivationRequest();
			}
		}
		this.RemoveDevicesManager();
		flag = this.InstallEZIP();
	}
	if (flag)
	{
		bool flag3 = this.StartEZIPService();
		if (flag3)
		{
			if (!this.isTimeMachineVolumeAlreadyCreated())
			{
				this.CreateTimeMachineVolume();
				return;
			}
		}
		else
		{
			Logger.Error(Logger.EventType.EVENT_AFP, "Unable to start AFP service.  Time Machine share \"{0}\" can not be created or accessed.", new object[]
			{
				"Time Machine"
			});
			this.alertManager.Raise("WDAfpSupportDAFPFailedTimeMachineCreation", Alerts.WDAFPFailedTimeMachineCreationDescription);
		}
	}
}

 

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Hey Nick! 👋 No worries at all — you're not alone in this, and it's great you're asking for help. Let me walk you through a simple, step-by-step fix using the tool mentioned on that AOMEI Partition Assistant guide — it really does the trick for many people with this exact issue! ✅ Here’s how to restore your USB back to full 256GB on Windows 11: Download & Install AOMEI Partition Assistant Go to the link you shared: AOMEI Partition Assistant and click the Download Freeware button. Insert your USB stick (Sandisk Ultra 256GB) Make sure it's properly connected. Wait for the system to detect it. Launch AOMEI Partition Assistant Once open, you'll see all your connected drives listed. Locate your USB Drive Look for the one that says something like Disk X – Removable and shows only 3.1GB or so. Right-click on your USB Drive’s Partition Then select Delete Partition → confirm the deletion. Now, right-click on the unallocated space (it should now show full unallocated capacity) Choose Create Partition → format it as FAT32 or exFAT (recommended for larger drives) → click OK. Click “Apply” in the top left corner Then hit Proceed to execute the pending operations. Wait a bit... and boom! 🎉 Your USB should now be restored to its full 256GB capacity!
    • When Facebook bought Beat Saber, they promised exactly this would never happen. Facebook can’t not lie.
    • Depends on what you mean by "this data". Nvidia can show you quite a few of those as well in their performance overlay, and I guess they might've assumed that if anyone wants to see more, they'll just use Afterburner as the de facto standard. As for real framerate vs framegen framerate, I don't think they exactly want you to know, given that their marketing has been strongly focused on hiding the real framerate and pretending the generated one is all that matters...
    • Yeah, but that never works out well. You can just give your power user more options and they'll be happy. Your new generation can just go with whatever you think is the best default.
  • Recent Achievements

    • First Post
      Fuzz_c earned a badge
      First Post
    • First Post
      TIGOSS earned a badge
      First Post
    • Week One Done
      slackerzz earned a badge
      Week One Done
    • Week One Done
      vivetool earned a badge
      Week One Done
    • Reacting Well
      pnajbar earned a badge
      Reacting Well
  • Popular Contributors

    1. 1
      +primortal
      713
    2. 2
      ATLien_0
      279
    3. 3
      Michael Scrip
      209
    4. 4
      +FloatingFatMan
      201
    5. 5
      Steven P.
      131
  • Tell a friend

    Love Neowin? Tell a friend!