Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单击一次更新后,“…”;。。。无法访问该文件,因为另一个进程正在使用它";集会_C#_Clickonce - Fatal编程技术网

C# 单击一次更新后,“…”;。。。无法访问该文件,因为另一个进程正在使用它";集会

C# 单击一次更新后,“…”;。。。无法访问该文件,因为另一个进程正在使用它";集会,c#,clickonce,C#,Clickonce,问题描述 我支持WPF ClickOnce部署的应用程序。该应用程序具有通过电子邮件向我报告异常的功能。每次部署之后,我通常会收到一到两个异常报告,如下所示。只有不到100个用户 调用堆栈不完全相同。它总是说“无法加载文件或程序集…”,然后列出一个类似EntityFramework或Unity的DLL。它还说,“(HRESULT的例外:0x80070020)” 我已禁用自动ClickOnce更新。我正在使用ApplicationDeployment API处理更新。下载更新后,我会显示一条状态栏

问题描述

我支持WPF ClickOnce部署的应用程序。该应用程序具有通过电子邮件向我报告异常的功能。每次部署之后,我通常会收到一到两个异常报告,如下所示。只有不到100个用户

调用堆栈不完全相同。它总是说“无法加载文件或程序集…”,然后列出一个类似EntityFramework或Unity的DLL。它还说,“(HRESULT的例外:0x80070020)”

我已禁用自动ClickOnce更新。我正在使用ApplicationDeployment API处理更新。下载更新后,我会显示一条状态栏消息,“Restart to run the latest version”(重新启动以运行最新版本)。然后用户会重新启动应用程序。重新启动应用程序后,出现“无法访问文件,因为另一个进程正在使用该文件”异常。通常,如果用户再次重新启动应用程序,则不再发生异常

另一位开发人员描述了类似的体验

这是什么原因造成的?

我最初认为,当用户启动新版本时,可能之前版本的应用程序仍在关闭。但是,该应用程序是一个单实例应用程序。在引发此异常之前,单实例功能在Main()中实现。这使我相当确信这不是由我的应用程序的两个实例引起的。此外,我的应用程序不是直接读取EntityFramework或Unity DLL

我还有两个假设

  • 病毒扫描程序正在锁定ClickOnce新复制的DLL
  • ClickOnce更新机制中存在Microsoft错误
  • 我的问题是,“有人知道这是什么原因吗?”

    示例调用堆栈#1

    以下是一个例子:

     System.IO.FileLoadException:
     Could not load file or assembly
     'Microsoft.Practices.Unity, Version=2.1.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
     or one of its dependencies.
     The process cannot access the file because
     it is being used by another process.
     (Exception from HRESULT: 0x80070020)
    
        at MyNamespace.AppState.RestartTemplateCacheThread(UserOptions userOptions)
        at MyNamespace.AppState.RestartTemplateCacheThread()
        at MyNamespace.MainWindow.hyperlinkReconnect(Object sender, RoutedEventArgs e)
    
        at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
        at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
        at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
        at System.Windows.ContentElement.RaiseEvent(RoutedEventArgs e)
        at System.Windows.Documents.Hyperlink.OnClick()
        at System.Windows.Documents.Hyperlink.DispatchNavigation(Object sender)
        at System.Windows.Documents.Hyperlink.DoUserInitiatedNavigation(Object sender)
        at System.Windows.Documents.Hyperlink.OnMouseLeftButtonUp(Object sender, MouseButtonEventArgs e)
        at System.Windows.Documents.Hyperlink.OnMouseLeftButtonUp(MouseButtonEventArgs e)
        at System.Windows.UIElement.OnMouseLeftButtonUpThunk(Object sender, MouseButtonEventArgs e)
        at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
        at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
        at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
        at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
        at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
        at System.Windows.UIElement.OnMouseUpThunk(Object sender, MouseButtonEventArgs e)
        at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
        at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
        at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
        at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
        at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
        at System.Windows.ContentElement.RaiseTrustedEvent(RoutedEventArgs args)
        at System.Windows.Input.InputManager.ProcessStagingArea()
        at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
        at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
        at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
        at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
        at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
        at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
        at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
        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)
    
    RestartTemplateCacheThread(…)中的行是

    …这大概是第一次访问Unity DLL

    示例调用堆栈#2

    在本例中,Unity DLL已成功加载,但EntityFramework DLL已锁定

     System.IO.FileLoadException: 
     Could not load file or assembly
     'EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
     or one of its dependencies.
     The process cannot access the file because it is being used by another process.
     (Exception from HRESULT: 0x80070020)
    
        at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName, ObjectHandleOnStack type)
        at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName)
        at System.RuntimeType.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)
        at System.Type.GetType(String typeName)
    
        at Microsoft.Practices.Unity.Configuration.ConfigurationHelpers.TypeResolverImpl.ResolveAlias(String typeNameOrAlias)
        at Microsoft.Practices.Unity.Configuration.ConfigurationHelpers.TypeResolverImpl.ResolveTypeInternal(String typeNameOrAlias)
        at Microsoft.Practices.Unity.Configuration.ConfigurationHelpers.TypeResolverImpl.ResolveType(String typeNameOrAlias, Boolean throwIfResolveFails)
        at Microsoft.Practices.Unity.Configuration.RegisterElement.GetMappedType()
        at Microsoft.Practices.Unity.Configuration.RegisterElement.ConfigureContainer(IUnityContainer container)
        at Microsoft.Practices.Unity.Configuration.ContainerElement.<>c__DisplayClass1.<ConfigureContainer>b__0(ContainerConfiguringElement element)
        at Microsoft.Practices.ObjectBuilder2.EnumerableExtensions.ForEach[TItem](IEnumerable`1 sequence, Action`1 action)
        at Microsoft.Practices.Unity.Configuration.ContainerElement.ConfigureContainer(IUnityContainer container)
        at Microsoft.Practices.Unity.Configuration.UnityConfigurationSection.Configure(IUnityContainer container, String configuredContainerName)
        at Microsoft.Practices.Unity.Configuration.UnityContainerExtensions.LoadConfiguration(IUnityContainer container, UnityConfigurationSection section, String containerName)
        at Microsoft.Practices.Unity.Configuration.UnityContainerExtensions.LoadConfiguration(IUnityContainer container)
    
        at MyNamespace.AppState.RestartTemplateCacheThread(UserOptions userOptions)
        at MyNamespace.AppState.SetUserOptions(UserOptions options, Boolean restartBackgroundThreads)
        at MyNamespace.Models.DatasetManager.LoadDataset(String path)
        at MyNamespace.MainWindow.MainWindow_Loaded(Object sender, RoutedEventArgs args)
    
        at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
        at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
        at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
        at System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)
        at System.Windows.BroadcastEventHelper.BroadcastEvent(DependencyObject root, RoutedEvent routedEvent)
        at System.Windows.BroadcastEventHelper.BroadcastLoadedEvent(Object root)
        at MS.Internal.LoadedOrUnloadedOperation.DoWork()
        at System.Windows.Media.MediaContext.FireLoadedPendingCallbacks()
        at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
        at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)
        at System.Windows.Media.MediaContext.AnimatedRenderMessageHandler(Object resizedCompositionTarget)
        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)
    
    System.IO.FileLoadException:
    无法加载文件或程序集
    'EntityFramework,版本=4.4.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089'
    或者它的一个依赖项。
    进程无法访问该文件,因为其他进程正在使用该文件。
    (HRESULT的异常:0x80070020)
    位于System.RuntimeTypeHandle.GetTypeByName(字符串名称、布尔throwOnError、布尔ignoreCase、布尔reflectionOnly、StackScrawMarkHandle stackMark、IntPtr pPrivHostBinder、布尔loadTypeFromPartialName、ObjectHandleOnStack类型)
    在System.RuntimeTypeHandle.GetTypeByName(字符串名称、布尔throwOnError、布尔ignoreCase、布尔reflectionOnly、StackScrawlMark和stackMark、IntPtr pPrivHostBinder、布尔loadTypeFromPartialName)
    在System.RuntimeType.GetType(字符串类型名称、布尔throwOnError、布尔ignoreCase、布尔reflectionOnly、堆栈爬网标记和堆栈标记)
    at System.Type.GetType(字符串类型名)
    在Microsoft.Practices.Unity.Configuration.ConfigurationHelpers.TypeResolverImpl.ResolveAlias(字符串typeNameOrAlias)上
    在Microsoft.Practices.Unity.Configuration.ConfigurationHelpers.TypeResolverImpl.ResolveTypeInternal(字符串typeNameOrAlias)
    在Microsoft.Practices.Unity.Configuration.ConfigurationHelpers.TypeResolverImpl.ResolveType(字符串typeNameOrAlias,布尔throwIfResolveFails)
    在Microsoft.Practices.Unity.Configuration.RegisterElement.GetMappedType()上
    位于Microsoft.Practices.Unity.Configuration.RegisterElement.ConfigureContainer(IUnityContainer容器)
    在Microsoft.Practices.Unity.Configuration.ContainerElement.c__DisplayClass1.b__0(ContainerConfiguringElement)上
    在Microsoft.Practices.ObjectBuilder2.EnumerableExtensions.ForEach[TItem](IEnumerable`1序列,Action`1 Action)
    在Microsoft.Practices.Unity.Configuration.ContainerElement.ConfigureContainer(IUnityContainer容器)上
    在Microsoft.Practices.Unity.Configuration.UnityConfigurationSection.Configure(IUnityContainer容器,字符串configuredContainerName)
    在Microsoft.Practices.Unity.Configuration.UnityContainerExtensions.LoadConfiguration(IUnityContainer容器、UnityConfiguration节、String容器名称)中
    位于Microsoft.Practices.Unity.Configuration.UnityContainerExtensions.LoadConfiguration(IUnityContainer容器)
    在MyNamespace.AppState.RestartTemplateCacheThread(UserOptions UserOptions)
    在MyNamespace.AppState.SetUserOptions(UserOptions选项,Boolean restartBackgroundThreads)
    在MyNamespace.Models.DatasetManager.LoadDataset(字符串路径)处
    在MyNamespace.MainWindow.MainWindow_加载(对象发送方,RoutedEventArgs参数)
    位于System.Windows.RoutedEventHandlerInfo.InvokeHandler(对象目标,RoutedEventTargets RoutedEventTargets)
    在System.Windows.EventRoute.InvokeHandlersImpl(对象源,RoutedEventArgs参数,布尔值重新调高)
    位于System.Windows.UIElement.RaiseEventImpl(DependencyObject发送方,RoutedEventTargets参数)
    在System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)处
    位于System.Windows.BroadcastEventHelper.BroadcastEvent(DependencyObject根,RoutedEvent RoutedEvent)
    位于System.Windows.BroadcastEventHelper.BroadcastLoadedEvent(对象根)
    在MS.Internal.LoadedRunLoadedOperation.DoWork()处
    在System.Windows.Media.MediaContext.FireLoadedPendingCallbacks()中
    在System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()中
    位于System.Windows.Media.MediaContext.RenderMessageHandlerCore(对象大小调整的CompositionTarget)
    位于System.Windows.Media.MediaContext.AnimatedRenderMessageHandler(对象大小调整的CompositionTarget)
    位于System.Windows.Threading.ExceptionWrapper.InternalRealCall(委托回调、对象参数、Int32 numArgs)
    在MS.Internal.Threading.ExceptionFilterHelpe
    
     System.IO.FileLoadException: 
     Could not load file or assembly
     'EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
     or one of its dependencies.
     The process cannot access the file because it is being used by another process.
     (Exception from HRESULT: 0x80070020)
    
        at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName, ObjectHandleOnStack type)
        at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName)
        at System.RuntimeType.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)
        at System.Type.GetType(String typeName)
    
        at Microsoft.Practices.Unity.Configuration.ConfigurationHelpers.TypeResolverImpl.ResolveAlias(String typeNameOrAlias)
        at Microsoft.Practices.Unity.Configuration.ConfigurationHelpers.TypeResolverImpl.ResolveTypeInternal(String typeNameOrAlias)
        at Microsoft.Practices.Unity.Configuration.ConfigurationHelpers.TypeResolverImpl.ResolveType(String typeNameOrAlias, Boolean throwIfResolveFails)
        at Microsoft.Practices.Unity.Configuration.RegisterElement.GetMappedType()
        at Microsoft.Practices.Unity.Configuration.RegisterElement.ConfigureContainer(IUnityContainer container)
        at Microsoft.Practices.Unity.Configuration.ContainerElement.<>c__DisplayClass1.<ConfigureContainer>b__0(ContainerConfiguringElement element)
        at Microsoft.Practices.ObjectBuilder2.EnumerableExtensions.ForEach[TItem](IEnumerable`1 sequence, Action`1 action)
        at Microsoft.Practices.Unity.Configuration.ContainerElement.ConfigureContainer(IUnityContainer container)
        at Microsoft.Practices.Unity.Configuration.UnityConfigurationSection.Configure(IUnityContainer container, String configuredContainerName)
        at Microsoft.Practices.Unity.Configuration.UnityContainerExtensions.LoadConfiguration(IUnityContainer container, UnityConfigurationSection section, String containerName)
        at Microsoft.Practices.Unity.Configuration.UnityContainerExtensions.LoadConfiguration(IUnityContainer container)
    
        at MyNamespace.AppState.RestartTemplateCacheThread(UserOptions userOptions)
        at MyNamespace.AppState.SetUserOptions(UserOptions options, Boolean restartBackgroundThreads)
        at MyNamespace.Models.DatasetManager.LoadDataset(String path)
        at MyNamespace.MainWindow.MainWindow_Loaded(Object sender, RoutedEventArgs args)
    
        at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
        at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
        at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
        at System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)
        at System.Windows.BroadcastEventHelper.BroadcastEvent(DependencyObject root, RoutedEvent routedEvent)
        at System.Windows.BroadcastEventHelper.BroadcastLoadedEvent(Object root)
        at MS.Internal.LoadedOrUnloadedOperation.DoWork()
        at System.Windows.Media.MediaContext.FireLoadedPendingCallbacks()
        at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
        at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)
        at System.Windows.Media.MediaContext.AnimatedRenderMessageHandler(Object resizedCompositionTarget)
        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)