public Boolean CopyInstallationFiles(String sourceFolder, String destinationFolder)
        {
            FileInfo[] sourceFiles = null;
            try
            {
                DirectoryInfo sourceDirectory = new DirectoryInfo(Path.Combine(sourceFolder, "Binaries"));
                sourceFiles = sourceDirectory.GetFiles("*.*", SearchOption.AllDirectories);
            }
            catch (Exception exc)
            {
                if (listener != null)
                {
                    listener.NotifyObject(new Exception("Falha ao copiar arquivos! " + exc.Message));
                }
                return(false);
            }

            TargetDirectory targetDirectory = new TargetDirectory(destinationFolder);

            if (!targetDirectory.CopyFilesFrom(sourceFiles))
            {
                if (listener != null)
                {
                    listener.NotifyObject(new Exception("Falha ao copiar arquivos! " + targetDirectory.GetLastError()));
                }
                return(false);
            }

            return(true);
        }
        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);
        }
        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);
        }