Странная проблема при установке - PullRequest
0 голосов
/ 12 июня 2019

Я создал консольное приложение, которое очень просто. По сути, я буду запускать каждый понедельник, чтобы сгенерировать отчет для каждого директора с данными только их сотрудников. Каждую неделю он проверяет, существует ли каталог для этой даты (я сохраняю файлы в папке с именем даты), и удаляет, если она есть, и создает ее, если нет. (в случае, если он стартует 2 раза в тот же день). Затем он заполняет шаблон электронной таблицы Excel данными из базы данных SQL (соединение ADODB) и сохраняет его в этом каталоге. Он отлично работает в VS, я создал установочный пакет и установил его на своем сервере, и .exe отлично работает, если выполняется вручную. Проблема, с которой я сталкиваюсь, - это планирование. Я пробовал оба задания SQL (операционная система (CmdExec), которая запускает файл bat, и я пробовал запланированное задание. Оба сталкиваются с одной и той же проблемой, они удаляют каталог и воссоздают папку, но не будут выполнить остальную часть кода. Есть мысли? Вот код: ` Открытый класс GenerateReport

Public Sub Excel()


    Dim conn As New ADODB.Connection()
    Dim rs As New ADODB.Recordset
    Dim rs2 As New ADODB.Recordset

    Dim strSQL As String
    Dim DirectorID As String
    Dim DirectorFullName As String


    Dim DateStamp As String
    Dim currentTime As System.DateTime = System.DateTime.Now
    Dim createreportfolder As String
    Dim strFileName As String
    Dim appPath As String = System.AppDomain.CurrentDomain.BaseDirectory
    Dim OpenPath As String




    Try

        'createreportfolder = appPath

        createreportfolder = Configuration.ConfigurationManager.AppSettings("SaveToPath")

        DateStamp = CStr(currentTime.Month & "-" & currentTime.Day & "-" & currentTime.Year)
        createreportfolder = createreportfolder + DateStamp

        'CREATE NEW DIRECTORY FOR REPORTS 

        If System.IO.Directory.Exists(createreportfolder) Then
            System.IO.Directory.Delete(createreportfolder, True)
        End If

        System.IO.Directory.CreateDirectory(createreportfolder)

        strSQL = "SELECT DISTINCT DirectorID,DirectorFullName FROM tLogClockComparisonReport ORDER BY 1 "



        conn.Open("Provider=SQLNCLI11; Initial Catalog=Operations; Data Source=")
        conn.CursorLocation = ADODB.CursorLocationEnum.adUseClient
        rs.Open(strSQL, conn, CursorTypeEnum.adOpenKeyset, LockTypeEnum.adLockOptimistic)

        While Not rs.EOF



            DirectorID = rs.Fields("DirectorID").Value
            DirectorFullName = rs.Fields("DirectorFullName").Value



            Console.WriteLine("Processing - " & DirectorFullName)

            strSQL = "SELECT DirectorFullName,Supervisor,Dept,CCLocation,HomeCostNumber,JobTitle,EMployee,PayDate,LogInTablet,LogOutTablet,ClockIn,ClockOut,FirstStop,LastStop,DiffMinIn,DiffMinOut FROM Operations.dbo.tLogClockComparisonReport WHERE DirectorID = '" & DirectorID & "'"
            rs2.Open(strSQL, conn, CursorTypeEnum.adOpenKeyset, LockTypeEnum.adLockOptimistic)


            'Open a workbook in Excel.
            Dim xlsApp As New Excel.Application
            Dim xlsWB As Excel.Workbook

            Dim xlsSheet As Object
            Dim xlsWorkbook As Excel.Workbook
            Dim strWorkBookPath As String

            OpenPath = Configuration.ConfigurationManager.AppSettings("ExcelTemplatePath")

            strWorkBookPath = OpenPath

            xlsWB = xlsApp.Workbooks.Open(strWorkBookPath)
            xlsApp.Visible = False


            'Transfer the data to Excel.

            xlsSheet = xlsWB.Worksheets("Summary Data")
            xlsSheet.range("A2").CopyFromRecordset(rs2)
            xlsSheet = xlsWB.Worksheets("Summary - By Supervisor")
            xlsSheet.PivotTables("pvtSup").pivotcache.refresh()
            xlsSheet = xlsWB.Worksheets("Summary - By Site")
            xlsSheet.PivotTables("pvtSite").pivotcache.refresh()



            'HIDE SHEETS
            xlsSheet = xlsWB.Worksheets("Summary Data")
            xlsSheet.visible = False


            rs2.Close()

            'Save the workbook and quit Excel.
            xlsWB.SaveAs(createreportfolder & "\" & DateStamp & " - " & DirectorFullName)
            strFileName = createreportfolder & "\" & DateStamp & " - " & DirectorFullName & ".xlsx"
            xlsApp.Quit()
            'Dim proc As System.Diagnostics.Process

            xlsSheet = Nothing
            xlsWorkbook = Nothing

            xlsApp = Nothing

            rs.MoveNext()




        End While


    Catch ex As Exception
        Debug.WriteLine(ex.Message)
        Debug.Write(ex)
        Debug.Write(vbCrLf)
        Console.WriteLine("Excel Generator FAILED")
    End Try


    If Process.GetProcessesByName("excel").GetLength(0) > 0 Then

        For Each proc In System.Diagnostics.Process.GetProcessesByName("EXCEL")


            proc.Kill()
        Next
    End If

    GC.Collect()




    'Close the connection

    'conn.Close()





End Sub

`

1 Ответ

0 голосов
/ 18 июня 2019

Мой ИТ-отдел нашел решение, опубликовав его здесь для кого-то, кому это может понадобиться. Создайте эти две папки: 32Bit: C: \ Windows \ System32 \ Config \ systemprofile \ Desktop
64Bit: C: \ Windows \ SysWOW64 \ Config \ systemprofile \ Desktop Excel нужны эти папки, если он не работает в интерактивном режиме. Создайте обе папки, даже если вы работаете в 64-битной ОС.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...