Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.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
VSS备份会导致自定义windows服务失败_Windows_Vb.net_Service_Timer_Volume Shadow Service - Fatal编程技术网

VSS备份会导致自定义windows服务失败

VSS备份会导致自定义windows服务失败,windows,vb.net,service,timer,volume-shadow-service,Windows,Vb.net,Service,Timer,Volume Shadow Service,我在vb.net中构建了自定义的windows服务,这些服务在计时器上运行,并在远程目录中查找要处理的文件。在一些服务器上,当VSS服务发生故障时,它们会在晚上10:04左右的同一时间无误地发生故障。服务错误如下所示: '进程无法访问文件filename.txt,因为另一进程正在使用该文件。' 有时没有错误,但服务挂起。我假设这是VSS服务。不管怎样,CPU有一个巨大的峰值,高达100%,然后下降。 我有一些日志(即上面无法写入的文件),它们将所有活动传递给我,每个进程都包装在一个try..ca

我在vb.net中构建了自定义的windows服务,这些服务在计时器上运行,并在远程目录中查找要处理的文件。在一些服务器上,当VSS服务发生故障时,它们会在晚上10:04左右的同一时间无误地发生故障。服务错误如下所示:

'进程无法访问文件filename.txt,因为另一进程正在使用该文件。'

有时没有错误,但服务挂起。我假设这是VSS服务。不管怎样,CPU有一个巨大的峰值,高达100%,然后下降。 我有一些日志(即上面无法写入的文件),它们将所有活动传递给我,每个进程都包装在一个try..catch中,它还将为我报告日志异常。没有任何结果。这些过程在代码的随机部分中失败,通常在轮询定时器中,有时在没有警告的处理中间。该服务挂起,但表示它仍在services.msc中运行

是否有人遇到过此问题或知道修复方法?我想让服务多线程化,以便在一个线程挂起时可以检查另一个线程,但不确定这是否能解决问题。我们已经尝试为服务器提供更多资源,这似乎有所帮助,但并没有完全解决问题。有些天它超载了,有些天它没有。使用windows server 2008 x64

提前感谢您的帮助

    Public Shared aTimer As New Timers.Timer

    Public Shared Sub SetTimer()
        aTimer.Interval = 60000
        ' Hook up the Elapsed event for the timer.  
        AddHandler aTimer.Elapsed, AddressOf OnTimedEvent
        aTimer.Enabled = True

    End Sub

    ' The event handler for the Timer.Elapsed event.  
    Private Shared Sub OnTimedEvent(source As Object, e As ElapsedEventArgs)
        Dim gen = New Service1
        aTimer.Enabled = False
        gen.ProcessEvents() 'This is the main function of the service
        aTimer.Enabled = True
    End Sub
更新:

我从来没有想到过这样一个简单的解决方案,但在任务管理器中,我右键单击该服务并将优先级设置为“Realtime”,希望备份期间的高CPU负载不会影响该服务。到目前为止还不错

这可以通过编程实现,因此每次服务重新启动时,它的优先级更高。这在我的OnStart()中:

VB.NET:

System.Diagnostics.Process.GetCurrentProcess().PriorityClass = System.Diagnostics.ProcessPriorityClass.RealTime