예제 #1
0
        private Boolean ExportTable(String tableName, String[] fieldNames, List <Object> rowList)
        {
            // Verifica se o diretório de saída está disponível
            if (!Directory.Exists(dataDirectory))
            {
                return(false);
            }

            // Remove o prefixo do nome da tabela e acrescenta a extensão do arquivo
            String entityName = tableName.Remove(0, 3);
            String outputFile = entityName + ".xml";

            // Abre o xml de saída para gravação
            StreamWriter streamWriter = File.CreateText(PathFormat.Adjust(dataDirectory) + outputFile);

            streamWriter.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
            streamWriter.WriteLine("<" + entityName + "Table name=\"" + tableName + "\" database=\"" + currentDatabase + "\" server=\"" + saAccess.server + "\" >");
            foreach (Object row in rowList)
            {
                String   tag         = entityName;
                Object[] fieldValues = (Object[])row;
                for (int index = 0; index < fieldValues.Length; index++)
                {
                    String attribute = fieldNames[index] + "=" + ConvertFieldValue(fieldValues[index]);
                    tag = tag + " " + attribute;
                }
                streamWriter.WriteLine("   <" + tag + " />");
            }
            streamWriter.WriteLine("</" + entityName + "Table>");
            streamWriter.Close();

            return(true);
        }
        private Boolean GetFrontendInfo()
        {
            txtProcessInfo.Text += Environment.NewLine + "Coletando dados de instalação...";
            const String retrieveFail = "Falha ao coletar dados de instalação. ";

            if (String.IsNullOrEmpty(txtSiteName.Text))
            {
                txtProcessInfo.Text += Environment.NewLine + retrieveFail + Environment.NewLine + "É necessário informar o nome do site. ";
                return(false);
            }

            String iisDirectory = IISHandler.GetWebRootDirectory();

            if (iisDirectory == null)
            {
                txtProcessInfo.Text += Environment.NewLine + retrieveFail + Environment.NewLine + "Não foi possivel localizar o diretório base do IIS (wwwRoot). ";
                txtProcessInfo.Text += Environment.NewLine + "Verifique se o Internet Information Services está instalado.";
                return(false);
            }

            // Ajusta o formato do caminho de instalação
            String installDirectory = PathFormat.Adjust(iisDirectory) + (txtSiteName.Text + "WebDir");

            // Se não houve nenhuma falha retorna informações do frontend e notifica sucesso
            frontendInfo = new FrontendInfo(txtSiteName.Text, installDirectory);
            return(true);
        }
        // Cria o arquivo onde será guardado um resumo do csv original
        public void Create(DateTime?fileDate)
        {
            if (fileDate == null)
            {
                return;
            }

            String logName = "PrintLog-" + DateFormat.Adjust(fileDate) + ".csv";

            String applicationFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            String logFolder         = PathFormat.Adjust(applicationFolder) + @"PrintLogs\";

            Directory.CreateDirectory(logFolder);

            fileLogger               = new FileLogger(logFolder + logName);
            fileLogger.FileHeader    = new String[2];
            fileLogger.FileHeader[0] = "Digest File - Source: Papercut Print Logger";
            fileLogger.FileHeader[1] = "Time,User,Printer,Document Name,Pages,Copies,Duplex,Color,DataType,Size";

            CSVReader csvReader            = new CSVReader(logFolder + logName, null);
            DataTable alreadyInsertedTable = csvReader.Read();

            alreadyInserted = new List <Object>();
            foreach (DataRow row in alreadyInsertedTable.Rows)
            {
                PrintedDocument printedDocument = new PrintedDocument();
                printedDocument.jobTime = DateTime.Parse(row["Time"].ToString());
                printedDocument.name    = row["Document Name"].ToString();

                alreadyInserted.Add(printedDocument);
            }
        }
예제 #4
0
        static void Main(String[] args)
        {
            foreach (String argument in args)
            {
                // Deve exportar as tabelas do banco
                if (argument.ToUpper().Contains("/E"))
                {
                    // Busca parâmetros de conexão na linha de comando, caso existam
                    DBAccess saAccess = null;
                    saAccess = DBAccess.GetDbAccess(args);

                    // Cria o diretório onde para onde os dados serão exportados
                    String baseDir       = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location.ToString());
                    String dataDirectory = PathFormat.Adjust(baseDir) + "Data";
                    Directory.CreateDirectory(dataDirectory);

                    // Executa a exportação dos databases
                    Recovery recovery = new Recovery(saAccess, dataDirectory);
                    recovery.DBExport("AppCommon");
                    recovery.DBExport("Accounting");

                    return;
                }
            }

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }
예제 #5
0
        private Boolean PrepareDirectory()
        {
            txtProcessInfo.Text += Environment.NewLine + "Preparando diretório de instalação...";
            const String prepareFail = "O diretório de instalação apresentou alguns problemas. ";

            // Ajusta o formato do caminho de instalação
            txtTargetDirectory.Text = PathFormat.Adjust(txtTargetDirectory.Text);

            // Prepara o diretório de destino ( faz algumas verificações / cria o diretório )
            // Caso existam arquivos no diretório aborta e exibe mensagem de erro
            TargetDirectory targetDir = new TargetDirectory(txtTargetDirectory.Text);

            if (!targetDir.Mount())
            {
                txtProcessInfo.Text += Environment.NewLine + prepareFail + Environment.NewLine + targetDir.GetLastError();
                return(false);
            }

            // Cria o subdiretório para gravação de log de cópias
            copyLogDirectory = @"C:\CopyLogs";
            try
            {
                DirectoryInfo dirInfo = new DirectoryInfo(copyLogDirectory);
                dirInfo.Create();
            }
            catch (Exception exc)
            {
                txtProcessInfo.Text += Environment.NewLine + prepareFail + Environment.NewLine + exc.Message;
                return(false);
            }

            return(true);
        }
예제 #6
0
        public CreateDatabaseForm(IListener listener)
        {
            InitializeComponent();
            this.listener = listener;
            String tempFolder = PathFormat.Adjust(Path.GetTempPath());

            installationFilesDirectory = PathFormat.Adjust(tempFolder + "AccountingServerFiles");
        }
        public Boolean Uninstall()
        {
            // A presença do serviço do windows "Print Log Router" indica que ele deve ser removido,
            // este é o principal serviço em execução no diretório mas existem outros que também são
            // removidos do registro (executa o /UNINSTALL de cada serviço)
            ServiceInfo printLogRouter = ServiceLocator.LocateWindowsService("Print Log Router");

            if (printLogRouter != null)
            {
                // Como não existe aplicativo de remoção, executa o /uninstall de cada serviço e apaga o diretório
                String   servicesDirectory = Path.GetDirectoryName(printLogRouter.PathName);
                String[] serviceList       = new String[] { "PrintLogRouter.exe", "PrintInspector.exe" };
                foreach (String serviceName in serviceList)
                {
                    String filename = PathFormat.Adjust(servicesDirectory) + serviceName;
                    if (!File.Exists(filename))
                    {
                        continue;                         // caso não ache o arquivo passa para o próximo da lista
                    }
                    Process serviceUninstall = new Process();
                    serviceUninstall.StartInfo.FileName  = filename;
                    serviceUninstall.StartInfo.Arguments = "/UNINSTALL";
                    serviceUninstall.EnableRaisingEvents = true;
                    serviceUninstall.Exited += new EventHandler(UninstallCompleted);
                    processRunning           = true;
                    serviceUninstall.Start();
                    while (processRunning)
                    {
                        Thread.Sleep(500);                    // Aguarda até a finalização do processo
                    }
                }
                Directory.Delete(servicesDirectory, true);
            }

            /* devido a problemas que tem ocorrido na desinstalação do produto,  a desinstalação automática do papercut logger foi retirada
             * ServiceInfo paperCutPrintLogger = ServiceLocator.LocateWindowsService("PCPrintLogger");
             * if (paperCutPrintLogger != null)
             * {
             *  // Executa o aplicativo de remoção
             *  //String[] arguments = ArgumentParser.ParseCommandLine(paperCutPrintLogger.PathName);
             *  //String printLoggerDirectory = Path.GetDirectoryName(arguments[0]);
             *  //String printLoggerUninstaller = Path.Combine(printLoggerDirectory, "unins000.exe");
             *  //if (File.Exists(printLoggerUninstaller))
             *  //{
             *  //    Process uninstaller = new Process();
             *  //    uninstaller.StartInfo.FileName = printLoggerUninstaller;
             *  //    uninstaller.StartInfo.Arguments = "/VERYSILENT";
             *  //    uninstaller.EnableRaisingEvents = true;
             *  //    uninstaller.Exited += new EventHandler(UninstallCompleted);
             *  //    processRunning = true;
             *  //    uninstaller.Start();
             *  //    while (processRunning) Thread.Sleep(500); // Aguarda até a finalização do processo
             *  //}
             * }
             */

            return(true);
        }
예제 #8
0
        // Formatos dos nomes de arquivo:
        //     daily         Ex.:  papercut-print-log-2009-05-19.csv
        //     montlhy       Ex.:  papercut-print-log-2009-05.csv
        //     all-time      Ex.:  papercut-print-log-all-time.csv

        public static String MountName(String logDirectory, int day, int month, int year)
        {
            String baseDir   = PathFormat.Adjust(logDirectory);
            String yearPart  = String.Format("-{0:0000}", year);
            String monthPart = String.Format("-{0:00}", month);
            String dayPart   = String.Format("-{0:00}", day);

            return(baseDir + baseName + yearPart + monthPart + dayPart + ".csv");
        }
        private Boolean InstallWebFrontend()
        {
            txtProcessInfo.Text += Environment.NewLine + "Iniciando instalação...";
            const String installFail = "Falha ao instalar frontend web. ";

            // Verifica se o ASP.NET está registrado no IIS
            Boolean aspNetRegistered = IISHandler.IsAspNetRegistered();

            if (!aspNetRegistered)
            {
                txtProcessInfo.Text += Environment.NewLine + installFail + Environment.NewLine + "O ASP.NET 2.0 não está registrado/habilitado no IIS.";
                return(false);
            }

            // Tenta criar os diretórios virtuais no IIS
            IISHandler iisHandler          = new IISHandler();
            Boolean    dirCreated          = false;
            String     webAccountingDir    = PathFormat.Adjust(frontendInfo.installDirectory) + "WebAccounting";
            String     webAdministratorDir = PathFormat.Adjust(frontendInfo.installDirectory) + "WebAdministrator";

            dirCreated = iisHandler.CreateVirtualDirectory(txtSiteName.Text, webAccountingDir, "LoginPage.aspx");
            if (!dirCreated)
            {
                txtProcessInfo.Text += Environment.NewLine + installFail + Environment.NewLine + iisHandler.GetLastError();
                return(false);
            }
            dirCreated = iisHandler.CreateVirtualDirectory(txtSiteName.Text + "Admin", webAdministratorDir, "LoginPage.aspx");
            if (!dirCreated)
            {
                txtProcessInfo.Text += Environment.NewLine + installFail + Environment.NewLine + iisHandler.GetLastError();
                return(false);
            }

            // Pergunta ao usuário se deseja reiniciar o IIS
            String dialogText = "O instalador precisa reiniciar o serviço de publicação na internet (IIS)." + Environment.NewLine +
                                "Escolha 'sim' para reiniciar agora ou 'não' para reiniciar mais tarde.";
            DialogResult dialogResult = MessageBox.Show(dialogText, "Reiniciar IIS agora?", MessageBoxButtons.YesNo);

            if (dialogResult != DialogResult.Yes)
            {
                return(true);                                  // recusou IISreset, sai do instalador (instalação OK)
            }
            // Tenta resetar o IIS
            Boolean iisReset = iisHandler.ResetIIS();

            if (!iisReset)
            {
                txtProcessInfo.Text += Environment.NewLine + installFail + Environment.NewLine + iisHandler.GetLastError();
                return(false);
            }

            // Se não houve nenhuma falha notifica sucesso
            return(true);
        }
예제 #10
0
        public ConfigurationForm(String targetDirectory, IListener listener)
        {
            InitializeComponent();
            this.installationInfo = null;
            this.listener         = listener;
            String programFilesDir = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);

            txtTargetDirectory.Text = PathFormat.Adjust(programFilesDir) + "DataCount";
            if (!String.IsNullOrEmpty(targetDirectory))
            {
                txtTargetDirectory.Text = targetDirectory;
            }
        }
예제 #11
0
        // Exporta a massa de dados contida no banco de dados (dados das tabelas)
        private static void ExportData(DBAccess saAccess)
        {
            // Cria o diretório onde para onde os dados serão exportados
            String baseDir       = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location.ToString());
            String dataDirectory = PathFormat.Adjust(baseDir) + "Data";

            Directory.CreateDirectory(dataDirectory);

            // Executa a exportação dos databases
            Recovery recovery = new Recovery(saAccess, dataDirectory);

            recovery.DBExport("AppCommon");
            recovery.DBExport("Accounting");
        }
예제 #12
0
        /// <summary>
        /// Constroi o XML com informações de acesso ao banco de dados
        /// </summary>
        public static void BuildDataAccess(String server, String username, String password, String targetDirectory)
        {
            StreamWriter streamWriter = File.CreateText(PathFormat.Adjust(targetDirectory) + "DataAccess.xml");

            String xmlContent = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" + Environment.NewLine +
                                "<dataaccess>" + Environment.NewLine +
                                "    <server>" + server + "</server>" + Environment.NewLine +
                                "    <username>" + username + "</username>" + Environment.NewLine +
                                "    <password>" + password + "</password>" + Environment.NewLine +
                                "</dataaccess>" + Environment.NewLine;

            streamWriter.Write(xmlContent);
            streamWriter.Close();
        }
예제 #13
0
        public void CopyFiles(String destDirectory)
        {
            // Verifica se os arquivos estão presentes no disco (não são nulos), a consistência
            // usando File.Exists foi feita previamente
            if ((shdFilename == null) || (splFilename == null))
            {
                return;
            }

            String outputPath = PathFormat.Adjust(destDirectory);

            // Força a criação de diretórios/subdiretórios inexistentes em outputPath
            Directory.CreateDirectory(outputPath);
            File.Copy(shdFilename, outputPath + Path.GetFileName(shdFilename));
            File.Copy(splFilename, outputPath + Path.GetFileName(splFilename));
        }
예제 #14
0
        void KickService(Object sender, ElapsedEventArgs e)
        {
            // Verifica se o aplicativo ServiceKicker está disponível
            String serviceLocation = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            String serviceKicker   = PathFormat.Adjust(serviceLocation) + "ServiceKicker.exe";

            if (!File.Exists(serviceKicker))
            {
                return;
            }

            // Derruba o serviço e reinicia
            String serviceName = '"' + this.ServiceName + '"';

            Process.Start(serviceKicker, "/Service:" + serviceName + " /WaitBeforeStop:8000 /WaitBeforeStart:59000");
        }
        private static XmlTextWriter GetOutputWriter(Stream outputStream)
        {
            XmlTextWriter xmlWriter = null;

            // Caso não exista um Stream para saída grava o XML em disco
            if (outputStream == null)
            {
                String baseDir     = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location.ToString());
                String xmlLocation = PathFormat.Adjust(baseDir) + "JobRouting.xml";
                xmlWriter = new XmlTextWriter(xmlLocation, Encoding.UTF8);
                return(xmlWriter);
            }

            xmlWriter = new XmlTextWriter(outputStream, Encoding.UTF8);
            return(xmlWriter);
        }
        /// <summary>
        /// Obtem os parâmetros de execução a partir do XML
        /// </summary>
        public static NameValueCollection GetTaskParams()
        {
            NameValueCollection taskParams = new NameValueCollection();

            try
            {
                String        baseDir     = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location.ToString());
                String        xmlLocation = PathFormat.Adjust(baseDir) + "JobRouting.xml";
                XmlTextReader xmlReader   = new XmlTextReader(xmlLocation);
                xmlReader.ReadStartElement("jobrouting");
                taskParams.Add("url", xmlReader.ReadElementString("url"));
                taskParams.Add("tenantId", xmlReader.ReadElementString("tenantid"));
                taskParams.Add("interval", xmlReader.ReadElementString("interval"));
                taskParams.Add("logDirectories", xmlReader.ReadElementString("logdirectories"));
                taskParams.Add("copyLogDir", xmlReader.ReadElementString("copylogdir"));
                taskParams.Add("installationKey", xmlReader.ReadElementString("installationkey"));
                taskParams.Add("xmlHash", xmlReader.ReadElementString("xmlhash"));
                xmlReader.ReadEndElement();
                xmlReader.Close();
            }
            catch
            {
                return(null);
            }

            String installationKey = ResourceProtector.GetHardwareId();

            installationKey = Cipher.GenerateHash(installationKey);

            String xmlHash = taskParams["url"] + taskParams["tenantId"] + taskParams["interval"] + taskParams["logDirectories"];

            xmlHash = Cipher.GenerateHash(xmlHash);

            // Verifica se os parâmetros estão corretos (batem com os configurados durante a instalação)
            if (installationKey != taskParams["installationkey"])
            {
                return(null);
            }
            if (xmlHash != taskParams["xmlhash"])
            {
                return(null);
            }

            return(taskParams);
        }
예제 #17
0
        /// <summary>
        /// Tenta remover os arquivos temporários de relatório
        /// </summary>
        public static void TryRemoveTempFiles()
        {
            String        reportDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            DirectoryInfo dirInfo   = new DirectoryInfo(reportDir);

            List <FileInfo> filesToRemove = new List <FileInfo>();

            filesToRemove.AddRange(dirInfo.GetFiles("Report*.pdf"));
            filesToRemove.AddRange(dirInfo.GetFiles("Report*.xls"));
            filesToRemove.AddRange(dirInfo.GetFiles("Report*.csv"));

            foreach (FileInfo fileInfo in filesToRemove)
            {
                // Tenta remover o arquivo, igonora erros caso esteja aberto/em uso
                String filePath = PathFormat.Adjust(reportDir) + fileInfo.Name;
                FileResource.TryDelete(filePath);
            }
        }
예제 #18
0
        /// <summary>
        /// Checa quais são os tenants existentes na na massa de dados
        /// </summary>
        public static List <DBObject> GetTenantsFromImportData(String dataDirectory)
        {
            List <DBObject> tenantList = new List <DBObject>();

            // Retorna uma lista vazia caso não encontre o diretório de dados
            Boolean dirExists = Directory.Exists(dataDirectory);

            if (!dirExists)
            {
                return(tenantList);
            }

            // Retorna uma lista vazia caso não encontre o arquivo de dados
            String  filename   = PathFormat.Adjust(dataDirectory) + "tenant.xml";
            Boolean fileExists = File.Exists(filename);

            if (!fileExists)
            {
                return(tenantList);
            }

            // Retorna uma lista vazia caso não consiga carregar os dados
            XmlNode tenantTable = (new ImportData(filename)).MainNode;

            if (tenantTable == null)
            {
                return(tenantList);
            }

            foreach (XmlNode tenant in tenantTable)
            {
                int    id   = int.Parse(tenant.Attributes["id"].Value);
                String name = tenant.Attributes["alias"].Value;
                // Remove os apóstrofes que delimitam a String
                name = name.Remove(0, 1);
                name = name.Remove(name.Length - 1, 1);

                tenantList.Add(new DBObject(id, name));
            }

            return(tenantList);
        }
        private Boolean CopyInstallationFiles()
        {
            txtProcessInfo.Text += Environment.NewLine + "Copiando arquivos de instalação...";
            const String copyFail = "Falha ao copiar arquivos de instalação. ";

            TargetDirectory targetDir = new TargetDirectory(frontendInfo.installDirectory);

            // Prepara o diretório de destino ( faz algumas verificações / cria o diretório )
            // Caso existam arquivos no diretório aborta e exibe mensagem de erro
            if (!targetDir.Mount())
            {
                txtProcessInfo.Text += Environment.NewLine + copyFail + Environment.NewLine + targetDir.GetLastError();
                return(false);
            }

            FileInfo[] sourceFiles = null;
            try // tenta obter os arquivos de origem (extraídos do instalador)
            {
                String tempFolder = PathFormat.Adjust(Path.GetTempPath());
                String installationFilesDirectory = PathFormat.Adjust(tempFolder + "AccountingServerFiles");
                File.Copy(installationFilesDirectory + "DataAccess.XML", installationFilesDirectory + @"WebFrontend\WebAccounting\App_Data\DataAccess.XML", true);
                File.Copy(installationFilesDirectory + "DataAccess.XML", installationFilesDirectory + @"WebFrontend\WebAdministrator\App_Data\DataAccess.XML", true);

                DirectoryInfo sourceDirectory = new DirectoryInfo(installationFilesDirectory + "WebFrontend");
                sourceFiles = sourceDirectory.GetFiles("*.*", SearchOption.AllDirectories);
            }
            catch (Exception exc)
            {
                txtProcessInfo.Text += Environment.NewLine + copyFail + Environment.NewLine + exc.Message;
                return(false);
            }

            // Tenta copiar os arquivos para o diretório de instalação
            if (!targetDir.CopyFilesFrom(sourceFiles))
            {
                txtProcessInfo.Text += Environment.NewLine + copyFail + Environment.NewLine + targetDir.GetLastError();
                return(false);
            }

            // Se não houve nenhuma falha notifica sucesso
            return(true);
        }
예제 #20
0
        /// <summary>
        /// Importa a massa de dados existente no diretório de logs
        /// </summary>
        private void ImportPreviousLogs(String logDirectory)
        {
            PrintLogSorter logSorter = new PrintLogSorter(logDirectory);

            String[] logFiles     = logSorter.GetOrderedFiles();
            DateTime?lastFileDate = null;

            // Importa os arquivos encontrados no diretório de log
            fileLogger.LogInfo("Importando logs pré-existentes no diretório " + logDirectory);
            foreach (String file in logFiles)
            {
                DateTime?fileDate = PrintLogFile.GetDate(file); // considera hora como sendo 00:00:00
                DateTime?today    = DateTime.Now.Date;          // considera hora como sendo 00:00:00

                // Importa todos com exceção do arquivo com as impressões de hoje, faz isso no final do dia
                if ((fileDate != null) && (fileDate != today))
                {
                    String fileName = PathFormat.Adjust(logDirectory) + file;
                    // Loga informações sem profundidade, para não sobrecarregar/poluir o arquivo de logs. Apenas
                    // em caso de falha acrescenta detalhes (processa as notificações)
                    fileLogger.LogInfo("Importando arquivo " + Path.GetFileName(fileName));
                    notifications.Clear();

                    Boolean imported = ImportFile(fileName, false);
                    if (!imported) // Falha ao importar o log
                    {
                        // São gravados logs detalhados para que se possa determinar a causa da falha
                        ProcessNotifications();
                        return;
                    }
                    lastFileDate = fileDate;
                }
            }

            // Grava a data do último acesso (baseada na data do último arquivo)
            if (lastFileDate != null)
            {
                PrintLogAccess printLogAccess = new PrintLogAccess(dataAccess.GetConnection());
                printLogAccess.SetLastAccess(lastFileDate.Value.AddDays(1));
            }
        }
        public PrintInspectTask()
        {
            notifications = new List <Object>();

            spoolMonitor = new SpoolMonitor(this);

            fileLogger               = new FileLogger(""); // não especifica o arquivo, usa o Relocate() posteriormente
            fileLogger.FileHeader    = new String[2];
            fileLogger.FileHeader[0] = "Print Inspector - Version 1.0.1";
            fileLogger.FileHeader[1] = "Time,User,Printer,Document Name,Pages,Copies,Duplex,Color,DataType,Size";

            String applicationFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

            logFolder = PathFormat.Adjust(applicationFolder) + @"PrintLogs\";
            Directory.CreateDirectory(logFolder);

            if (!EventLog.SourceExists("Print Inspector"))
            {
                EventLog.CreateEventSource("Print Inspector", null);
            }
        }
예제 #22
0
        private void btnIniciar_Click(object sender, EventArgs e)
        {
            btnIniciar.Enabled = false;

            String  server  = txtServer.Text;
            DBLogin saLogin = new DBLogin(txtUsername.Text, txtPassword.Text);

            // Cria o diretório onde para onde os dados serão exportados
            String baseDir       = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location.ToString());
            String dataDirectory = PathFormat.Adjust(baseDir) + "Data";

            Directory.CreateDirectory(dataDirectory);

            // Executa a exportação dos databases
            Recovery recovery = new Recovery(new DBAccess(server, saLogin), dataDirectory);

            recovery.DBExport("AppCommon");
            recovery.DBExport("Accounting");

            btnIniciar.Enabled = true;
            MessageBox.Show("Backup dos dados concluído");
        }
예제 #23
0
        // Cria o arquivo onde será guardado um resumo do csv original
        private void CreateDigest(DateTime?fileDate)
        {
            if (!createDigest)
            {
                return;
            }
            if (fileDate == null)
            {
                return;
            }

            String logName = "PrintLog-" + DateFormat.Adjust(fileDate) + ".csv";

            String applicationFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            String logFolder         = PathFormat.Adjust(applicationFolder) + @"PrintLogs\";

            Directory.CreateDirectory(logFolder);

            fileLogger               = new FileLogger(logFolder + logName);
            fileLogger.FileHeader    = new String[2];
            fileLogger.FileHeader[0] = "Print Inspector - Version 1.0.1";
            fileLogger.FileHeader[1] = "Time,User,Printer,Document Name,Pages,Copies,Duplex,Color,DataType,Size";
        }
예제 #24
0
        public void RunAll(String scriptsDirectory, IProgressListener progressListener)
        {
            listener.NotifyObject("Origem: [DatabaseScripts]   Destino(database): " + sqlConnection.Database);

            String        path       = PathFormat.Adjust(scriptsDirectory);
            List <String> scriptList = new List <String>();

            TextReader textReader = new StreamReader(path + "ExecutionOrder.txt");
            String     line       = "";

            while (line != null)
            {
                line = textReader.ReadLine();
                if (line != null)
                {
                    scriptList.Add(line);
                }
            }
            textReader.Close();

            scriptsExecuted = 0;
            progressMeter   = new ProgressMeter(scriptList.Count, progressListener);
            foreach (String script in scriptList)
            {
                currentScript = script;
                ContainedFile file = containerHandler.ExtractFromContainer(path + "ScriptFiles.xml", script);
                if (file == null)
                {
                    throw new Exception("Script não encontrado no XML: " + script);
                }

                ExecuteQuery(file.fileContent);
                scriptsExecuted++;
                progressMeter.IncreaseProgress(1);
            }
        }
예제 #25
0
        private void ImportForm_Shown(Object sender, EventArgs e)
        {
            // Obtem a lista de empresas a partir da massa de dados
            String baseDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location.ToString());

            dataDirectory = PathFormat.Adjust(baseDir) + "Data";
            List <DBObject> tenantList = ImportContext.GetTenantsFromImportData(dataDirectory);

            // Desabilita a importação pois o não foi possivel carregar a lista de empresas
            if (tenantList.Count < 1)
            {
                DisableTenantSelection();
                btnImport.Enabled = false;
                txtProcessInfo.Clear();
                txtProcessInfo.Text = "Massa de dados não encontrada. Aguardando ação do usuário...";
                return;
            }

            // Monta a view com as empresas existentes
            foreach (DBObject tenant in tenantList)
            {
                tenantListBox.Items.Add(tenant);
            }
        }
        public void Execute()
        {
            // Verifica se as dependências foram instanciadas (se o método InitializeTaskState foi chamado)
            if (taskParams == null)
            {
                return;
            }
            if (dataAccess == null)
            {
                return;
            }
            if (notifications == null)
            {
                return;
            }
            if (fileLogger == null)
            {
                return;
            }

            // Verifica os parâmetros recebidos
            String        logDirectory = taskParams["logDirectory"];
            DirectoryInfo dirInfo      = new DirectoryInfo(logDirectory);

            dataAccess.OpenConnection();

            // "lastAccess" é gravado e recuperado do banco com frequência, logo não pode ser obtido de "taskParams"
            CopyLogAccess copyLogAccess = new CopyLogAccess(dataAccess.GetConnection());
            DateTime      lastAccess    = copyLogAccess.GetLastAccess();

            // Inicializa o parâmetro "lastAccess" na primeira execução ou quando estiver desatualizado
            if (firstExecution || copyLogAccess.IsOutOfDate(lastAccess))
            {
                copyLogAccess.SetLastAccess(DateTime.Now);
                firstExecution = false;
                dataAccess.CloseConnection();
                return;
            }

            // Não processa (sai do método) se a tarefa já foi executada hoje
            if (DateTime.Now.Date.CompareTo(lastAccess) <= 0)
            {
                dataAccess.CloseConnection();
                return;
            }

            // Inicia o append no arquivo de log (acrescentando o "startingDelimiter")
            fileLogger.LogInfo("Importação de log - Iniciando execução...", true);
            // Procura os arquivos .CSV no diretório de logs, faz a importação e armazena um backup
            // do arquivo com a extensão .OLD
            fileLogger.LogInfo("Fazendo varredura de arquivos .CSV no diretório de logs: " + logDirectory);
            FileInfo[] files       = dirInfo.GetFiles();
            int        filesParsed = 0;

            foreach (FileInfo file in files)
            {
                if (Path.GetExtension(file.Name).ToUpper() == ".CSV")
                {
                    fileLogger.LogInfo("Processando arquivo: " + file.Name);
                    String filePath = PathFormat.Adjust(logDirectory);
                    String fileName = Path.GetFileNameWithoutExtension(file.Name);
                    ImportFile(filePath + fileName + ".csv");
                    CopyLogFile.StoreOldFile(filePath, fileName, ".csv");
                    filesParsed++;
                }
            }
            if (filesParsed == 0)
            {
                fileLogger.LogInfo("Nenhum arquivo processado( Não existem .CSVs no diretório).");
            }
            fileLogger.LogInfo("Execução concluída.");

            // Grava a data do último acesso no banco
            copyLogAccess.SetLastAccess(DateTime.Now);

            dataAccess.CloseConnection();
        }
예제 #27
0
        public Boolean SendCopyJobs(String logDirectory)
        {
            Boolean       success       = true;
            CopyLogSender copyLogSender = new CopyLogSender(serviceUrl, listener);

            DirectoryInfo logDir = new DirectoryInfo(logDirectory);

            if (!logDir.Exists)
            {
                NotifyListener("Falha ao enviar logs. O diretório " + logDirectory + " não existe.");
                return(false);
            }

            String devicesXml = PathFormat.Adjust(logDirectory) + "Devices.xml";

            if (!File.Exists(devicesXml))
            {
                NotifyListener("Falha ao enviar logs. O arquivo " + devicesXml + " não foi encontrado.");
                return(false);
            }
            List <CopyLogDevice> devices = GetDevices(devicesXml);

            // Procura os arquivos .CSV no diretório de logs, faz a importação e armazena um backup
            // do arquivo com a extensão .OLD
            NotifyListener("Fazendo varredura de arquivos .CSV no diretório de logs: " + logDirectory);
            FileInfo[] files       = logDir.GetFiles();
            int        filesParsed = 0;

            foreach (FileInfo file in files)
            {
                if (Path.GetExtension(file.Name).ToUpper() == ".CSV")
                {
                    NotifyListener("Processando arquivo: " + file.Name);
                    String filePath = PathFormat.Adjust(logDirectory);
                    String fileName = Path.GetFileNameWithoutExtension(file.Name);

                    // Procura o dispositivo que gerou o log (quando não encontra retorna null)
                    CopyLogDevice sourceDevice = SearchLogFileSource(file.Name, devices);

                    // Processa o arquivo de log, possui tratamento caso "sourceDevice" seja null
                    if (!ProcessCopyLogFile(filePath + fileName + ".csv", sourceDevice, copyLogSender))
                    {
                        success = false;
                    }

                    // Armazena um backup do arquivo com a extensão .OLD caso o arquivo tenha mais de um dia
                    DateTime lastWrite = CopyLogFile.GetTimeStamp(filePath + fileName + ".csv");
                    if (lastWrite < DateTime.Now.AddDays(-1))
                    {
                        CopyLogFile.StoreOldFile(filePath, fileName, ".csv");
                    }

                    // Se processou o arquivo com sucesso incrementa a contagem
                    if (success)
                    {
                        filesParsed++;
                    }
                }
            }
            if (filesParsed == 0)
            {
                NotifyListener("Nenhum arquivo processado( Não existem .CSVs no diretório ou houve falha no processamento).");
            }

            if (!copyLogSender.FinishSending())
            {
                success = false; // Falha ao enviar algum pacote de logs
            }
            return(success);
        }
        private Boolean InstallServices()
        {
            txtProcessInfo.Text += Environment.NewLine + "Iniciando instalação...";
            const String installFail = "Falha ao instalar serviços. ";

            if (String.IsNullOrEmpty(txtInstallDirectory.Text))
            {
                txtProcessInfo.Text += Environment.NewLine + installFail + Environment.NewLine + "É necessário informar um diretório. ";
                return(false);
            }

            // Ajusta o formato do caminho de instalação
            txtInstallDirectory.Text = PathFormat.Adjust(txtInstallDirectory.Text);
            txtProcessInfo.Text     += Environment.NewLine + "Preparando-se para copiar arquivos...";
            TargetDirectory targetDir = new TargetDirectory(txtInstallDirectory.Text);

            // Prepara o diretório de destino ( faz algumas verificações / cria o diretório )
            // Caso existam arquivos no diretório aborta e exibe mensagem de erro
            if (!targetDir.Mount())
            {
                txtProcessInfo.Text += Environment.NewLine + installFail + Environment.NewLine + targetDir.GetLastError();
                return(false);
            }

            txtProcessInfo.Text += Environment.NewLine + "Copia de arquivos iniciada...";
            FileInfo[] sourceFiles = null;
            try // tenta obter os arquivos de origem (extraídos do instalador)
            {
                String tempFolder = PathFormat.Adjust(Path.GetTempPath());
                String installationFilesDirectory = PathFormat.Adjust(tempFolder + "AccountingServerFiles");
                File.Copy(installationFilesDirectory + "DataAccess.XML", installationFilesDirectory + @"WindowsServices\DataAccess.XML", true);

                DirectoryInfo sourceDirectory = new DirectoryInfo(installationFilesDirectory + "WindowsServices");
                sourceFiles = sourceDirectory.GetFiles("*.*", SearchOption.AllDirectories);
            }
            catch (Exception exc)
            {
                txtProcessInfo.Text += Environment.NewLine + installFail + Environment.NewLine + exc.Message;
                return(false);
            }

            // Tenta copiar os arquivos para o diretório de instalação
            if (!targetDir.CopyFilesFrom(sourceFiles))
            {
                txtProcessInfo.Text += Environment.NewLine + installFail + Environment.NewLine + targetDir.GetLastError();
                return(false);
            }

            try // Tenta registrar os serviços no sistema operacional e inicia-los
            {
                txtProcessInfo.Text += Environment.NewLine + "Registrando serviços no Windows...";
                ServiceHandler.InstallService(txtInstallDirectory.Text + "PrintLogImporter.EXE");
                ServiceHandler.InstallService(txtInstallDirectory.Text + "CopyLogImporter.EXE");
                ServiceHandler.InstallService(txtInstallDirectory.Text + "ReportMailer.EXE");

                txtProcessInfo.Text += Environment.NewLine + "Iniciando serviços...";
                ServiceHandler.StartService("Print Log Importer", 33000);
                ServiceHandler.StartService("Copy Log Importer", 33000);
                ServiceHandler.StartService("Report Mailer", 33000);
            }
            catch (Exception exc)
            {
                txtProcessInfo.Text += Environment.NewLine + installFail + Environment.NewLine + exc.Message;
                return(false);
            }

            // Se não houve nenhuma falha retorna informações da instalação e notifica sucesso
            servicesInfo = GetServicesInfo();
            return(true);
        }
예제 #29
0
        public static String MountName(String logDirectory)
        {
            String baseDir = PathFormat.Adjust(logDirectory);

            return(baseDir + baseName + "-all-time.csv");
        }