//tests public static void TaskManagerSaveAndLoadTest(MainForm frm) { string filename = @"c:\tempObjectInstance\TestMgr1.xml"; PFTaskManager taskManager = new PFTaskManager(PFTaskObjects.enTaskStorageType.XMLFiles, @"c:\tempObjectInstance\"); try { _msg.Length = 0; _msg.Append("TaskManagerSaveAndLoadTest started ...\r\n"); Program._messageLog.WriteLine(_msg.ToString()); if (File.Exists(filename)) { File.Delete(filename); } for (int t = 1; t <= 5; t++) { string taskName = "Task" + t.ToString("000"); PFTask task = new PFTask(taskName); task.MaxTaskHistoryEntries = 25; task.TaskType = enTaskType.WindowsExecutable; task.FileToRun = @"c:\rundir\" + taskName + @".exe"; taskManager.TaskList.Add(task); } taskManager.SaveToXmlFile(filename); PFTaskManager taskMgr2 = PFTaskManager.LoadFromXmlFile(filename); _msg.Length = 0; _msg.Append(taskMgr2.ToXmlString()); Program._messageLog.WriteLine(_msg.ToString()); } catch (System.Exception ex) { _msg.Length = 0; _msg.Append(AppGlobals.AppMessages.FormatErrorMessage(ex)); Program._messageLog.WriteLine(_msg.ToString()); AppMessages.DisplayErrorMessage(_msg.ToString(), _saveErrorMessagesToAppLog); } finally { _msg.Length = 0; _msg.Append("\r\n... TaskManagerSaveAndLoadTest finished."); Program._messageLog.WriteLine(_msg.ToString()); } }
public void GetTaskFromXml() { string taskName = _frm.txtTaskName.Text.Trim(); PFTask task = null; string inputFileName = string.Empty; try { if (_frm.chkEraseOutputBeforeEachTest.Checked) { Program._messageLog.Clear(); } _frm._saveFilter = "XML Files|*.xml|All Files|*.*"; _frm._saveSelectionsFolder = _taskDefinitionsFolder; if (taskName.Length > 0) { _frm._saveSelectionsFile = taskName + ".xml"; } else { _frm._saveSelectionsFile = string.Empty; } DialogResult res = _frm.ShowOpenFileDialog(); if (res == DialogResult.OK) { _frm.InitForm(); taskName = Path.GetFileNameWithoutExtension(_frm._saveSelectionsFile); if (taskName.Length == 0) { _msg.Length = 0; _msg.Append("You must specify a task name"); throw new System.Exception(_msg.ToString()); } inputFileName = Path.Combine(_taskDefinitionsFolder, taskName + ".xml"); if (File.Exists(inputFileName) == false) { _msg.Length = 0; _msg.Append("Unable to find file for specified task name: "); _msg.Append(inputFileName); throw new System.Exception(_msg.ToString()); } task = PFTask.LoadFromXmlFile(inputFileName); _frm.txtTaskName.Text = task.TaskName; _frm.txtTaskDescription.Text = task.TaskDescription; _frm.cboTaskType.Text = task.TaskType.ToString(); _frm.txtMaxHistoryEntries.Text = task.MaxTaskHistoryEntries.ToString(); _frm.txtTaskSchedule.Text = task.ScheduleName; _frm.txtFileToRun.Text = task.FileToRun; _frm.txtWorkingDirectory.Text = task.WorkingDirectory; if (task.Arguments != null) { foreach (string s in task.Arguments) { if (s.Trim().Length > 0) { _frm.txtArguments.Text += s + Environment.NewLine; } } } _frm.cboWindowStyle.Text = task.WindowStyle.ToString(); _frm.chkCreateNoWindow.Checked = task.CreateNoWindow; _frm.chkUseShellExecute.Checked = task.UseShellExecute; _frm.chkRedirectStandardOutput.Checked = task.RedirectStandardOutput; _frm.chkRedirectStandardError.Checked = task.RedirectStandardError; } } catch (System.Exception ex) { _msg.Length = 0; _msg.Append(AppGlobals.AppMessages.FormatErrorMessage(ex)); Program._messageLog.WriteLine(_msg.ToString()); AppMessages.DisplayErrorMessage(_msg.ToString(), _saveErrorMessagesToAppLog); } finally { ; } }
public void RunTask() { PFTask task = new PFTask(); PFTaskHistoryEntry the = new PFTaskHistoryEntry(); PFTimers.Stopwatch sw = new PFTimers.Stopwatch(); string connectionString = string.Empty; string scheduleFolder = string.Empty; string scheduleName = string.Empty; try { if (_frm.chkEraseOutputBeforeEachTest.Checked) { Program._messageLog.Clear(); } if (_frm.txtTaskName.Text.Trim().Length == 0 || _frm.txtFileToRun.Text.Trim().Length == 0) { _msg.Length = 0; _msg.Append("You must specify a the name and a file to run for RunTest"); throw new System.Exception(_msg.ToString()); } sw.Start(); _msg.Length = 0; _msg.Append("Before taskProcessor.Start"); Program._messageLog.WriteLine(_msg.ToString()); System.Diagnostics.Process p = Process.GetCurrentProcess(); foreach (ProcessThread th in p.Threads) { _msg.Length = 0; _msg.Append("Thread ID: "); _msg.Append(th.Id.ToString()); Program._messageLog.WriteLine(_msg.ToString()); } scheduleFolder = _scheduleDefinitionsFolder; scheduleName = Path.GetFileNameWithoutExtension(_frm.txtTaskSchedule.Text.Trim()) + ".xml"; if (_frm.optUseXmlFiles.Checked) { connectionString = Path.Combine(scheduleFolder, scheduleName); } else if (_frm.optUseDatabase.Checked) { connectionString = _taskDefsDbConnectionString; } else { _msg.Length = 0; _msg.Append("You must select storage type: XML Files or Database."); throw new System.Exception(_msg.ToString()); } task.TaskName = _frm.txtTaskName.Text; task.TaskDescription = _frm.txtTaskDescription.Text; task.TaskType = PFAppUtils.PFEnumProcessor.StringToEnum <enTaskType>(_frm.cboTaskType.Text); task.MaxTaskHistoryEntries = Convert.ToInt32(_frm.txtMaxHistoryEntries.Text); if (_frm.optUseXmlFiles.Checked) { task.Schedule = PFSchedule.LoadFromXmlFile(connectionString); } else { task.Schedule = PFSchedule.LoadFromDatabase(connectionString, _frm.txtTaskSchedule.Text.Trim()); } task.FileToRun = _frm.txtFileToRun.Text; task.WorkingDirectory = _frm.txtWorkingDirectory.Text; string[] lines = _frm.txtArguments.Lines; task.Arguments = lines; task.WindowStyle = PFAppUtils.PFEnumProcessor.StringToEnum <enWindowStyle>(_frm.cboWindowStyle.Text); task.CreateNoWindow = _frm.chkCreateNoWindow.Checked; task.UseShellExecute = _frm.chkUseShellExecute.Checked; task.RedirectStandardOutput = _frm.chkRedirectStandardOutput.Checked; task.RedirectStandardError = _frm.chkRedirectStandardError.Checked; the.TaskID = task.ID; the.TaskName = task.TaskName; the.ScheduledStartTime = task.Schedule.GetCurrentScheduledDateTime(DateTime.Now, DateTime.Now.AddHours(1)); PFTaskProcessor taskProcessor = new PFTaskProcessor(task); taskProcessor.Start(); _msg.Length = 0; _msg.Append("After taskProcessor.Start"); Program._messageLog.WriteLine(_msg.ToString()); System.Diagnostics.Process p1 = Process.GetCurrentProcess(); foreach (ProcessThread th in p1.Threads) { _msg.Length = 0; _msg.Append("Thread ID: "); _msg.Append(th.Id.ToString()); Program._messageLog.WriteLine(_msg.ToString()); } _msg.Length = 0; _msg.Append("Main thread id: "); _msg.Append(System.Threading.Thread.CurrentThread.ManagedThreadId.ToString()); Program._messageLog.WriteLine(_msg.ToString()); _msg.Length = 0; _msg.Append("Spawned thread id: "); _msg.Append(taskProcessor.ThreadID.ToString()); Program._messageLog.WriteLine(_msg.ToString()); while (taskProcessor.HasFinished == false) { System.Threading.Thread.Sleep(1000); System.Threading.Thread.Yield(); } sw.Stop(); _msg.Length = 0; _msg.Append("Elapsed time: "); _msg.Append(sw.FormattedElapsedTime); Program._messageLog.WriteLine(_msg.ToString()); _msg.Length = 0; _msg.Append("\r\nTaskProcessor property values: \r\n"); _msg.Append("Curr Directory: "); _msg.Append(task.WorkingDirectory); _msg.Append("\r\n"); _msg.Append("Command Line: "); _msg.Append(task.FileToRun); _msg.Append(" "); _msg.Append(PFTextProcessor.ConvertStringArrayToString(task.Arguments)); _msg.Append("\r\n"); _msg.Append("StartTime: "); _msg.Append(taskProcessor.StartTime.ToString("MM/dd/yyyy HH:mm:ss")); _msg.Append("\r\n"); _msg.Append("FinishTime "); _msg.Append(taskProcessor.FinishTime.ToString("MM/dd/yyyy HH:mm:ss")); _msg.Append("\r\n"); _msg.Append("Elapsed Time: "); _msg.Append(taskProcessor.ElapsedTimeFormatted); _msg.Append("\r\n"); _msg.Append("Exit Code: "); _msg.Append(taskProcessor.ProcessExitCode.ToString()); _msg.Append("\r\n"); _msg.Append("OutputMessages: "); _msg.Append(taskProcessor.OutputMessages); _msg.Append("\r\n"); _msg.Append("ErrorMessages: "); _msg.Append(taskProcessor.ErrorMessages); _msg.Append("\r\n"); Program._messageLog.WriteLine(_msg.ToString()); //fill up and save the history entry the.ActualStartTime = taskProcessor.StartTime; the.ActualEndTime = taskProcessor.FinishTime; the.TaskOutputMessages = taskProcessor.OutputMessages; the.TaskErrorMessages = taskProcessor.ErrorMessages; the.TaskReturnCode = taskProcessor.ProcessExitCode; if (taskProcessor.ProcessExitCode == 0) { the.TaskRunResult = enTaskRunResult.Success; } else { the.TaskRunResult = enTaskRunResult.Failure; } if (_frm.optUseXmlFiles.Checked) { string theFilename = _taskHistoryFolder + the.TaskName + "_" + the.ActualEndTime.ToString("_yyyyMMdd_HHmmss") + ".xml"; if (File.Exists(theFilename)) { File.Delete(theFilename); } the.SaveToXmlFile(theFilename); } else if (_frm.optUseDatabase.Checked) { the.SaveToDatabase(_taskDefsDbConnectionString); } else { _msg.Length = 0; _msg.Append("You must specify whether to store the history in XML files or Database."); throw new System.Exception(_msg.ToString()); } } catch (System.Exception ex) { _msg.Length = 0; _msg.Append(AppGlobals.AppMessages.FormatErrorMessage(ex)); Program._messageLog.WriteLine(_msg.ToString()); AppMessages.DisplayErrorMessage(_msg.ToString(), _saveErrorMessagesToAppLog); } finally { ; } }
public void SaveTask() { string taskName = _frm.txtTaskName.Text.Trim(); PFTask task = null; string outputFileName = string.Empty; try { if (_frm.chkEraseOutputBeforeEachTest.Checked) { Program._messageLog.Clear(); } if (taskName.Length == 0) { _msg.Length = 0; _msg.Append("You must specify a the name"); throw new System.Exception(_msg.ToString()); } task = new PFTask(taskName); task.TaskDescription = _frm.txtTaskDescription.Text; task.TaskType = PFAppUtils.PFEnumProcessor.StringToEnum <enTaskType>(_frm.cboTaskType.Text); task.MaxTaskHistoryEntries = Convert.ToInt32(_frm.txtMaxHistoryEntries.Text); task.ScheduleName = _frm.txtTaskSchedule.Text; task.FileToRun = _frm.txtFileToRun.Text; task.WorkingDirectory = _frm.txtWorkingDirectory.Text; string[] lines = _frm.txtArguments.Lines; task.Arguments = lines; task.WindowStyle = PFAppUtils.PFEnumProcessor.StringToEnum <enWindowStyle>(_frm.cboWindowStyle.Text); task.CreateNoWindow = _frm.chkCreateNoWindow.Checked; task.UseShellExecute = _frm.chkUseShellExecute.Checked; task.RedirectStandardOutput = _frm.chkRedirectStandardOutput.Checked; task.RedirectStandardError = _frm.chkRedirectStandardError.Checked; outputFileName = Path.Combine(_taskDefinitionsFolder, taskName + ".xml"); if (Directory.Exists(_taskDefinitionsFolder) == false) { Directory.CreateDirectory(_taskDefinitionsFolder); } _msg.Length = 0; _msg.Append("Task "); _msg.Append(taskName); _msg.Append(" saved to "); if (_frm.optUseXmlFiles.Checked) { task.SaveToXmlFile(outputFileName); _msg.Append(outputFileName); } else { task.SaveToDatabase(_frm._taskDefsDbConnectionString); _msg.Append(_frm._taskDefsDbConnectionString); } Program._messageLog.WriteLine(_msg.ToString()); } catch (System.Exception ex) { _msg.Length = 0; _msg.Append(AppGlobals.AppMessages.FormatErrorMessage(ex)); Program._messageLog.WriteLine(_msg.ToString()); AppMessages.DisplayErrorMessage(_msg.ToString(), _saveErrorMessagesToAppLog); } finally { ; } }
public void GetTaskFromDatabase() { string taskName = _frm.txtTaskName.Text.Trim(); PFList <PFTask> taskList = null; PFTask task = null; PFTaskManager taskMgr = new PFTaskManager(enTaskStorageType.Database, _taskDefsDbConnectionString); string inputFileName = string.Empty; try { if (_frm.chkEraseOutputBeforeEachTest.Checked) { Program._messageLog.Clear(); } taskList = taskMgr.GetTaskList(); NameListPrompt namesPrompt = new NameListPrompt(); namesPrompt.lblSelect.Text = "Select the name from list below:"; for (int i = 0; i < taskList.Count; i++) { namesPrompt.lstNames.Items.Add(taskList[i].TaskName); } if (taskList.Count > 0) { namesPrompt.lstNames.SelectedIndex = 0; } DialogResult res = namesPrompt.ShowDialog(); if (res == DialogResult.OK) { if (namesPrompt.lstNames.SelectedIndex == -1) { _msg.Length = 0; _msg.Append("You did not select any task to load"); throw new System.Exception(_msg.ToString()); } _frm.InitForm(); taskName = namesPrompt.lstNames.SelectedItem.ToString(); if (taskName.Length == 0) { _msg.Length = 0; _msg.Append("You must specify a task name"); throw new System.Exception(_msg.ToString()); } task = taskMgr.GetTaskByName(taskName); if (task == null) { _msg.Length = 0; _msg.Append("Unable to find task "); _msg.Append(taskName); _msg.Append(" in the database at "); _msg.Append(_taskDefsDbConnectionString); throw new System.Exception(_msg.ToString()); } _frm.txtTaskName.Text = task.TaskName; _frm.txtTaskDescription.Text = task.TaskDescription; _frm.cboTaskType.Text = task.TaskType.ToString(); _frm.txtMaxHistoryEntries.Text = task.MaxTaskHistoryEntries.ToString(); _frm.txtTaskSchedule.Text = task.ScheduleName; _frm.txtFileToRun.Text = task.FileToRun; _frm.txtWorkingDirectory.Text = task.WorkingDirectory; if (task.Arguments != null) { foreach (string s in task.Arguments) { if (s.Trim().Length > 0) { _frm.txtArguments.Text += s + Environment.NewLine; } } } _frm.cboWindowStyle.Text = task.WindowStyle.ToString(); _frm.chkCreateNoWindow.Checked = task.CreateNoWindow; _frm.chkUseShellExecute.Checked = task.UseShellExecute; _frm.chkRedirectStandardOutput.Checked = task.RedirectStandardOutput; _frm.chkRedirectStandardError.Checked = task.RedirectStandardError; } } catch (System.Exception ex) { _msg.Length = 0; _msg.Append(AppGlobals.AppMessages.FormatErrorMessage(ex)); Program._messageLog.WriteLine(_msg.ToString()); AppMessages.DisplayErrorMessage(_msg.ToString(), _saveErrorMessagesToAppLog); } finally { ; } }
private async Task <bool> TraverseTree(string root, int maxTasks) { string currentDir = root; using (var throttler = new SemaphoreSlim(maxTasks)) { var postTaskTasks = new List <PFTask>(); while (currentDir != null) { if (currentDir == root) { // First time get the directories syncroniously to populate the DB with directories to run on IEnumerable <string> directories = Directory.EnumerateDirectories(currentDir); List <string> lst = new List <string>(); foreach (string dir in directories) { try { DirectoryInfo di = new DirectoryInfo(dir); lst.Add(di.FullName); Log.Trace("Added folder: " + di.FullName + ", Thread Id: " + Thread.CurrentThread.ManagedThreadId); } catch (Exception ex) { Log.Info(ex, "User doesn't have permissions to folder: " + dir); } } //await SMBDal.BulkAddFolders(directories.ToList()); await SMBDal.BulkAddFolders(lst); } else { Log.Trace("Before wait: " + currentDir + ", wait: " + throttler.CurrentCount + ", Thread Id: " + Thread.CurrentThread.ManagedThreadId); await throttler.WaitAsync(); Log.Trace("After wait: " + currentDir + ", wait: " + throttler.CurrentCount + ", Thread Id: " + Thread.CurrentThread.ManagedThreadId); string value = currentDir.ToString(); PFTask t = new PFTask(); t.Task = Task.Run(() => ProcessDir(value), t.CancellationToken).ContinueWith(tsk => release(throttler)); postTaskTasks.Add(t); Log.Trace("After add task: " + currentDir + ", Thread Id: " + Thread.CurrentThread.ManagedThreadId); } // Fetch the next directory to traverse and do it again currentDir = await SMBIterator.GetNextFolderForTraverse(); Log.Trace("GetNextFolderForTraverse returned: " + currentDir + ", Thread Id: " + Thread.CurrentThread.ManagedThreadId); // Clean the completed tasks from the array foreach (PFTask t in postTaskTasks) { if (t.Task.IsCompleted || t.Task.IsCanceled || t.Task.IsFaulted) { _tasksToRemove.Add(t); } } foreach (PFTask t in _tasksToRemove) { postTaskTasks.Remove(t); } _tasksToRemove = new List <PFTask>(); if (currentDir == null) { Log.Trace("WaitAll" + ", Thread Id: " + Thread.CurrentThread.ManagedThreadId); Task.WaitAll(postTaskTasks.Select(t => t.Task).ToArray()); currentDir = await SMBIterator.GetNextFolderForTraverse(); Log.Trace("Got directory after wait all: " + currentDir + ", Thread Id: " + Thread.CurrentThread.ManagedThreadId); } } } return(true); }
public async Task <bool> Scan(Repository repo) { bool scanDone = false; var postTaskTasks = new List <PFTask>(); object SpinLock = new object(); PrepCredentials(repo); using (var throttler = new SemaphoreSlim(_maxFilesScanCocur)) { // Scan files while (!scanDone) { bool semValue = await throttler.WaitAsync(_taskTimeout); if (!semValue) { // See what tasks are hanging for more than 30 seconds and kill them foreach (PFTask t in postTaskTasks) { if (t.StartTime.Subtract(DateTime.UtcNow).Seconds > _taskTimeout) { t.TokenSource.Cancel(); } } } IteratorItem item = null; lock (SpinLock) { // Get next item for iteration item = SMBIterator.NextItem(); } if (item != null) { // process the next item PFTask tsk = new PFTask(); tsk.Task = Task.Run <ScanResult>(() => ScanNext(repo, item), tsk.CancellationToken).ContinueWith(t => release(throttler)); postTaskTasks.Add(tsk); } else { scanDone = true; } // Clean the completed tasks from the wait array foreach (PFTask t in postTaskTasks) { if (t.Task.IsCompleted || t.Task.IsCanceled || t.Task.IsFaulted) { _tasksToRemove.Add(t); } } foreach (PFTask t in _tasksToRemove) { postTaskTasks.Remove(t); t.Task.Dispose(); } _tasksToRemove = new List <PFTask>(); if (scanDone) { // Wait for all the tasks to finish before exiting Task.WaitAll(postTaskTasks.Select(i => i.Task).ToArray(), 30000); } } } Counter.PrintAll(); return(true); }
public static void InitTaskProcessorTest(MainForm frm) { PFTask task = new PFTask(); PFTaskHistoryEntry the = new PFTaskHistoryEntry(); PFTimers.Stopwatch sw = new PFTimers.Stopwatch(); try { _msg.Length = 0; _msg.Append("InitTaskProcessorTest started ...\r\n"); Program._messageLog.WriteLine(_msg.ToString()); sw.Start(); _msg.Length = 0; _msg.Append("Before taskProcessor.Start"); Program._messageLog.WriteLine(_msg.ToString()); System.Diagnostics.Process p = Process.GetCurrentProcess(); foreach (ProcessThread th in p.Threads) { _msg.Length = 0; _msg.Append("Thread ID: "); _msg.Append(th.Id.ToString()); Program._messageLog.WriteLine(_msg.ToString()); } task.TaskName = "TestTask01"; task.TaskDescription = "Test the task for Testprog"; task.TaskType = enTaskType.WindowsExecutable; task.FileToRun = @"C:\Temp\TestAppFolders\FilesToRun\testbat01.bat"; task.WorkingDirectory = @"C:\Temp\TestAppFolders\FilesToRun"; task.MaxTaskHistoryEntries = 15; task.Schedule = PFSchedule.LoadFromXmlFile(@"C:\ProFast\Projects\ScheduleFiles\TestWeeklyOccurs.xml"); the.TaskID = task.ID; the.TaskName = task.TaskName; the.ScheduledStartTime = task.Schedule.GetCurrentScheduledDateTime(DateTime.Now, DateTime.Now.AddHours(1)); PFTaskProcessor taskProcessor = new PFTaskProcessor(task); taskProcessor.Start(); _msg.Length = 0; _msg.Append("After taskProcessor.Start"); Program._messageLog.WriteLine(_msg.ToString()); System.Diagnostics.Process p1 = Process.GetCurrentProcess(); foreach (ProcessThread th in p1.Threads) { _msg.Length = 0; _msg.Append("Thread ID: "); _msg.Append(th.Id.ToString()); Program._messageLog.WriteLine(_msg.ToString()); } _msg.Length = 0; _msg.Append("Main thread id: "); _msg.Append(System.Threading.Thread.CurrentThread.ManagedThreadId.ToString()); Program._messageLog.WriteLine(_msg.ToString()); _msg.Length = 0; _msg.Append("Spawned thread id: "); _msg.Append(taskProcessor.ThreadID.ToString()); Program._messageLog.WriteLine(_msg.ToString()); while (taskProcessor.HasFinished == false) { System.Threading.Thread.Sleep(1000); System.Threading.Thread.Yield(); } sw.Stop(); _msg.Length = 0; _msg.Append("Elapsed time: "); _msg.Append(sw.FormattedElapsedTime); Program._messageLog.WriteLine(_msg.ToString()); _msg.Length = 0; _msg.Append("\r\nTaskProcessor property values: \r\n"); _msg.Append("StartTime: "); _msg.Append(taskProcessor.StartTime.ToString("MM/dd/yyyy HH:mm:ss")); _msg.Append("\r\n"); _msg.Append("FinishTime "); _msg.Append(taskProcessor.FinishTime.ToString("MM/dd/yyyy HH:mm:ss")); _msg.Append("\r\n"); _msg.Append("Elapsed Time: "); _msg.Append(taskProcessor.ElapsedTimeFormatted); _msg.Append("\r\n"); _msg.Append("Exit Code: "); _msg.Append(taskProcessor.ProcessExitCode.ToString()); _msg.Append("\r\n"); _msg.Append("OutputMessages: "); _msg.Append(taskProcessor.OutputMessages); _msg.Append("\r\n"); _msg.Append("ErrorMessages: "); _msg.Append(taskProcessor.ErrorMessages); _msg.Append("\r\n"); Program._messageLog.WriteLine(_msg.ToString()); //fill up and save the history entry the.ActualStartTime = taskProcessor.StartTime; the.ActualEndTime = taskProcessor.FinishTime; the.TaskOutputMessages = taskProcessor.OutputMessages; the.TaskErrorMessages = taskProcessor.ErrorMessages; the.TaskReturnCode = taskProcessor.ProcessExitCode; if (taskProcessor.ProcessExitCode == 0) { the.TaskRunResult = enTaskRunResult.Success; } else { the.TaskRunResult = enTaskRunResult.Failure; } //string theFilename = @"c:\tempObjectInstance\" + the.TaskName + "_" + the.TaskID.ToString() + "_" + the.ActualEndTime.ToString("_yyyyMMdd_HHmmss") + ".txt"; string theFilename = @"c:\tempObjectInstance\" + the.TaskName + "_" + the.ActualEndTime.ToString("_yyyyMMdd_HHmmss") + ".txt"; if (File.Exists(theFilename)) { File.Delete(theFilename); } the.SaveToXmlFile(theFilename); } catch (System.Exception ex) { _msg.Length = 0; _msg.Append(AppGlobals.AppMessages.FormatErrorMessage(ex)); Program._messageLog.WriteLine(_msg.ToString()); AppMessages.DisplayErrorMessage(_msg.ToString(), _saveErrorMessagesToAppLog); } finally { _msg.Length = 0; _msg.Append("\r\n... InitTaskProcessorTest finished."); Program._messageLog.WriteLine(_msg.ToString()); } }