Несколько месяцев назад я создал пакет служб SSIS, который используется для обновления нескольких рабочих листов Excel (+ несколько других вещей)
Теперь мой колледж, который все еще работает над проектом, сообщает об этом странном поведении.Пакет служб SSIS запланирован как задание агента SQL.
Он запускается ежечасно с 8:00.В 8 утра он всегда терпит неудачу , его вывод: в 8 утра никто не вошел на сервер.Второй раз, в 9 утра, работа идет нормально.(RefreshAll сработало) Его вывод: в этот момент на сервере всегда есть кто-то, вошедший в систему через RDP.
(На самом деле я не знаю о других запусках в тот же день)
Задача представляет собой задачу VB Script, которая вызывает библиотеки Excel Interop.Я помню, как мне было трудно заставить его работать, пока я не установил Excel 2010 x86 на сервер.-> Excel полностью и законно установлен на сервере.
В тот момент я предположил и решил, что иногда он что-то не так и Excel не закрывался должным образом.Когда я открыл taskmgr, я обнаружил +10 экземпляров Excel.exe, запущенных ... Это было во время разработки.
Мой колледж провел интересный тест : планировал работу каждую минуту, входил в систему ивыключить несколько раз на сервер.Каждый раз, когда никто не входил в систему на сервере (RDP), задание не выполнялось.При входе в систему задание выполнялось ОК!
Ниже кода, который используется в задаче сценария 'RefreshAll'.
Я также использовал threading.sleep, потому что в противном случае я получил ошибки тайм-аута.Другого пути не нашел.
Заранее спасибо !!L
Public Sub Main()
Dts.TaskResult = ScriptResults.Success
Dim oApp As New Microsoft.Office.Interop.Excel.Application
oApp.Visible = False
'oApp.UserControl = True
Dim oldCI As System.Globalization.CultureInfo = _
System.Threading.Thread.CurrentThread.CurrentCulture
System.Threading.Thread.CurrentThread.CurrentCulture = _
New System.Globalization.CultureInfo("en-US")
Dim wb As Microsoft.Office.Interop.Excel.Workbook
wb = oApp.Workbooks.Open(Dts.Variables("User::FileNameHandleFull1").Value.ToString)
oApp.DisplayAlerts = False
wb.RefreshAll()
Threading.Thread.Sleep(10000)
wb.Save()
wb.Close()
oApp.DisplayAlerts = True
oApp.Quit()
Runtime.InteropServices.Marshal.ReleaseComObject(oApp)
End Sub
End Class