Autoupdate of 1.5.28 to 1.5.30 fails in several respects
* Auto-Update by the app installs to %ProgramFiles%\VidCoder, even if the running instance lives elsewhere and running the installer manually would recognize the last used installation path properly.
* If done with queue entries using nlmeans or manual presets using nlmeans (as written by build 28), the app is not startable.
* Deleting %AppData%\VidCoder\VidCoder.sqlite "fixes" the problem. Workaround would be acceptable if there was a way to export/import user presets into/from an xml file.
* Executing an "UPDATE presetsXml SET xml = REPLACE(xml, '>NlMeans<', '>NLMeans<') WHERE xml LIKE '%>NlMeans<%'; UPDATE settings SET value = REPLACE(value, '>NlMeans<', '>NLMeans<') WHERE name = 'EncodeJobs2'; COMMIT TRANSACTION; VACUUM FULL;" against the sqlite database fixes the problem properly - but is that within everyones' skill set?.
* Oh, and the installer overwriting a cleaned BuiltInPresets.xml without asking isn't to my liking either :) No, seriously: A "hide all builtin presets" preference would be ideal.
* Other missing options: Auto-Vacuum, Auto-Cleanup of log files (those in appdata) and at least an option to disable the copying of tags (what I'd really like is the ability to automatically set all well-known tags from a sidecar file and/or automatically set a cover from a jpeg with same name in the source folder)
* Minor criticism: Having the queue in a single blob inside the settings table seems silly. Shouldn't a blob-per-entry approach like for the presets be a bit more friendly to the fragile sqlite engine?
Note the "NlMeans" value it complains about didn't get there without pain either: When I updated from .26beta it modified all my presets and queue entries resetting them to no denoising because it didn't have a backwards compatibility translator for the old notation - but it didn't crash either. So it *did* have Exception handling in the preset parser in the past!
Crash output - redundant as the above should already be obvious:
```
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidOperationException: There is an error in XML document (1, 1205). ---> System.InvalidOperationException: Instance validation error: 'NlMeans' is not a valid value for Denoise.
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read71_Denoise(String s)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read75_VCProfile(Boolean isNullable, Boolean checkType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read86_Preset(Boolean isNullable, Boolean checkType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read253_Preset()
--- End of inner exception stack trace ---
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
at VidCoder.Model.Presets.LoadPresetXmlString(String presetXml) in d:\docs\projects\VidCoder\VidCoder\Model\Presets.cs:line 159
at VidCoder.Model.Presets.GetPresetListFromDb() in d:\docs\projects\VidCoder\VidCoder\Model\Presets.cs:line 748
at VidCoder.Model.Presets.get_UserPresets() in d:\docs\projects\VidCoder\VidCoder\Model\Presets.cs:line 58
at VidCoder.ViewModel.Components.PresetsViewModel..ctor() in d:\docs\projects\VidCoder\VidCoder\ViewModel\Components\PresetsViewModel.cs:line 36
--- End of inner exception stack trace ---
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at GalaSoft.MvvmLight.Ioc.SimpleIoc.MakeInstance[TClass]()
--- End of inner exception stack trace ---
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
at System.Delegate.DynamicInvokeImpl(Object[] args)
at GalaSoft.MvvmLight.Ioc.SimpleIoc.DoGetService(Type serviceType, String key)
at GalaSoft.MvvmLight.Ioc.SimpleIoc.GetInstance[TService]()
at VidCoder.ViewModel.Components.ProcessingViewModel..ctor() in d:\docs\projects\VidCoder\VidCoder\ViewModel\Components\ProcessingViewModel.cs:line 47
--- End of inner exception stack trace ---
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at GalaSoft.MvvmLight.Ioc.SimpleIoc.MakeInstance[TClass]()
--- End of inner exception stack trace ---
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
at System.Delegate.DynamicInvokeImpl(Object[] args)
at GalaSoft.MvvmLight.Ioc.SimpleIoc.DoGetService(Type serviceType, String key)
at GalaSoft.MvvmLight.Ioc.SimpleIoc.GetInstance[TService]()
at VidCoder.ViewModel.MainViewModel..ctor() in d:\docs\projects\VidCoder\VidCoder\ViewModel\MainViewModel.cs:line 100
at VidCoder.App.OnStartup(StartupEventArgs e) in d:\docs\projects\VidCoder\VidCoder\App.xaml.cs:line 137
at System.Windows.Application.<.ctor>b__1(Object unused)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
```
Comments: The NLMeans crash should be fixed in 1.5.31.