Программа перестает создавать файл журнала, но продолжает работать. (с перерывами)

Таким образом, Quickbooks не позволяет службе Windows подключаться к своей системе через свой QBFC13.0. Он также не позволяет запускать любую программу автоматически, все должно выполняться в контексте ПОЛЬЗОВАТЕЛЯ. Я пробовал все, чтобы обойти это. Где я сейчас: у меня есть приложение Windows (.exe), которое вручную запускается пользователем. Он бесконечно зацикливается, но в 4 часа утра он должен собрать данные из QuickBooks. Работа, которую он выполняет, увенчается успехом (иногда).

Проблема возникает случайным образом, когда он пытается выполнить работу в 4 часа утра. Диспетчер задач показывает, что он все еще работает, но в файлах журнала больше нет записей. Когда он находится в своем цикле, он должен регистрировать каждую минуту, говоря, что он активен. Я не могу понять, как он перестает писать в журнал (или вообще что-то делать), но все еще работает в диспетчере задач. Кроме того, когда он останавливается, он ничего не записывает в журнал, никаких ошибок не обнаружено.

Я не делал никакой очистки кода, поэтому прошу прощения, если он плохо организован и неправильный.


static void Main(string[] args)
        {
            WriteToFile("Program Startup " + DateTime.Now);

            try
            {

                var DebugLevel = System.Configuration.ConfigurationManager.AppSettings["Debug"];
                while (1 > 0)
                {
                    Thread.Sleep(1000 * 60);
                    WriteToFile("Timer Ticked " + DateTime.Now);
                    if ((DateTime.Now.Hour == 4 && DateTime.Now.Minute == 0 && attempt == -1) || DebugLevel == "DEBUG" || (attempt <= 2 && attempt >= 0))
                    {
                        GC.Collect();
                        GC.WaitForPendingFinalizers();
                        try
                        {
                            attempt++;//iterate the attempt
                            WriteToFile("QuickBooks data gather executable started " + DateTime.Now + " Attempt Number: " + Convert.ToString(attempt + 1));

                            SetupQBSession();
                            QBCustomer customerQuery = new QBCustomer();
                            List<ICustomerRet> customers = customerQuery.DoCustomerQuery(sessionManager, connectionOpen, sessionBegun);
                            WriteToFile("Initial Connection to Quickbooks succesfull. " + DateTime.Now);
                            foreach (ICustomerRet r in customers)
                            {
                                //WriteToFile(r.Name.GetValue());
                                //Make database Call to log QB customer data.
                                using (CSTClassesDataContext cst = new CSTClassesDataContext(ConfigurationManager.ConnectionStrings["CST"].ConnectionString))
                                {
                                    //save the customer data
                                    var DBCustomerSaveResult = cst.QB_Customer_Save(r.Name.GetValue(), (bool)r.IsActive.GetValue());
                                    WriteToFile("QuickBooks Customer Data Saved for  " + r.Name.GetValue() + " " + DateTime.Now);

                                    string connetionString = null;
                                    SqlConnection connection;
                                    SqlCommand command;
                                    string sql = null;
                                    SqlDataReader dataReader;
                                    connetionString = cst.Connection.ConnectionString;
                                    sql = "select * from QB_customer where QB_customer.customer_name = '" + r.Name.GetValue() + "'";
                                    connection = new SqlConnection(connetionString);
                                    try
                                    {
                                        connection.Open();
                                        command = new SqlCommand(sql, connection);
                                        dataReader = command.ExecuteReader();

                                        if (dataReader.Read() && dataReader.HasRows)
                                        {
                                            QBInvoice invoicesQuery = new QBInvoice();
                                            List<IInvoiceRet> invoices = invoicesQuery.DoInvoiceQuery(dataReader.GetValue(1).ToString(), sessionManager, connectionOpen, sessionBegun);
                                            foreach (IInvoiceRet invoice in invoices)
                                            {

                                                if (invoice.Memo.GetValue().ToString() != null)
                                                {
                                                    int dbQBcustomerID = Convert.ToInt32(dataReader.GetValue(0));
                                                    var DBInvoiceSaveResult = cst.QB_invoice_save(dbQBcustomerID, invoice.RefNumber.GetValue().ToString(), invoice.Memo.GetValue().ToString(), (decimal)invoice.BalanceRemaining.GetValue(), invoice.DueDate.GetValue(), invoice.IsPaid.GetValue());
                                                    WriteToFile("Invoices updated for QB_customer_id: " + dbQBcustomerID + ", Invoice Number " + invoice.RefNumber.GetValue().ToString() + ", IsPaid " + invoice.IsPaid.GetValue() + " " + DateTime.Now);
                                                }
                                            }
                                            //Console.WriteLine(dataReader.GetValue(0) + " - " + dataReader.GetValue(1) + " - " + dataReader.GetValue(2));

                                        }
                                        dataReader.Close();
                                        command.Dispose();
                                        connection.Close();
                                    }
                                    catch (Exception ex)
                                    {
                                        WriteToFile(ex.ToString());

                                    }

                                }
                            }
                            CloseQBSession();
                            attempt = -1;
                        }
                        catch (Exception exeption)
                        {
                            if (attempt <= 2 && attempt >= 0)
                            {
                                //attempt++;
                            }
                            else
                            {
                                attempt = -1;
                            }
                            CloseQBSession();
                            WriteToFile(exeption.ToString());
                        }
                        finally
                        {
                            WriteToFile("QB Thread Finished " + DateTime.Now);
                        }
                    }
                }
            }
            catch(Exception high)
            {
                WriteToFile(high.ToString());
            }
            // Hide
            ShowWindow(handle, SW_HIDE);
            //Console.Read();

        }
        private static void WriteToFile(string Message)
        {

            string filepath = "FILEPATH REMOVED FOR STACK OVERFLOW(unneeded information)" + DateTime.Now.Date.ToShortDateString().Replace('/', '_') + ".txt";
            if (!File.Exists(filepath))
            {
                // Create a file to write to.   
                using (StreamWriter sw = File.CreateText(filepath))
                {
                    sw.WriteLine(Message);
                }
            }
            else
            {
                using (StreamWriter sw = File.AppendText(filepath))
                {
                    sw.WriteLine(Message);
                }
            }
        }

person SODIE    schedule 10.12.2019    source источник
comment
Можете ли вы подключить отладчик к процессу и посмотреть, что происходит?   -  person Michael Dorgan    schedule 10.12.2019
comment
Проверьте размеры файла журнала для каждого из них. Мое первое предположение заключается в том, что файл определенного размера слишком велик и блокируется. Кроме того, где находится метод WriteToFile? Как выглядят эти файлы?   -  person Austin T French    schedule 11.12.2019
comment
@AustinTFrench Я включил метод WriteToFile. Размер файла журнала не кажется вероятным, так как новый файл создается ежедневно, и его размер составляет около 493 КБ после успешного завершения процесса.   -  person SODIE    schedule 11.12.2019


Ответы (1)


Используйте журналы событий. перейдите в «Просмотр событий»> «Журналы окон»> «Приложение», затем найдите свое приложение при последнем запуске. вы можете видеть, что там происходит.

person Berzerk25    schedule 11.12.2019