Program.cs 17.3 KB
using System;
using System.Diagnostics;
//using System.Net;
using System.Windows.Forms;
using Microsoft.Win32;
using System.IO;
using System.IO.Compression;


namespace AtualizadorVLibras
{
    static class Program
    {
        static void ResetEnvVar(string vlibrasPath){
            string vLibrasAtual = Environment.GetEnvironmentVariable("PATH_VLIBRAS",EnvironmentVariableTarget.User);
            string vLibrasNovo = Directory.GetCurrentDirectory();

            if(!vLibrasNovo.Equals(vLibrasAtual)){
                Console.WriteLine("O VLibras foi atualizado ou não estava instalado, é necessário atualizar algumas informações.");
                Console.WriteLine("Por favor, confirme a reconfiguração das variáveis de ambiente do VLibras.");
                string[] buscaReset = Directory.GetFiles(vlibrasPath, "ResetEnvVar.exe", SearchOption.AllDirectories);

				if (buscaReset.Length > 0){
					string resetPath = buscaReset[0];

					System.Diagnostics.ProcessStartInfo resetProcInfo = new System.Diagnostics.ProcessStartInfo();
					resetProcInfo.FileName = resetPath;
					resetProcInfo.Verb = "runas"; //ADM
					resetProcInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
					//resetProcInfo.Arguments = comandoUnins;

					System.Diagnostics.Process resetProc = new System.Diagnostics.Process();
					resetProc.StartInfo = resetProcInfo;
					resetProc.Start();
					//resetProc.WaitForExit();
				}
            }
        }

        [STAThread]
        static void Main()
        {
			//ENDEREÇO DE ONDE SERÃO BAIXADOS OS PACOTES (.ZIP) DE SINAIS (1.ZIP, 2.ZIP E ETC...)
			//string url = @"http://atualizacao.vlibras.lavid.ufpb.br/windows/";
			//string url = @"http://127.0.0.1:8000/"; //localhost
			//string url = @"http://187.114.198.128:8080/";
			//string url = @"http://150.165.205.150:8080/";
			string url = @"http://150.165.205.150/";
			//string url = @"http://177.133.106.152:8089/";
			//string url = @"http://179.185.184.75:8080/";
			string rootPath = @"..\";
            string vlibrasPath = @"..\VLibras\";
            string pythonPath = @"..\Python\";
            string bundlesPath = @"..\Bundles\";
            string dirAtual = Directory.GetCurrentDirectory();
        	string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
    		string lnkPath = System.IO.Path.Combine(desktopPath, "VLibras.lnk");

            string[] buscaDeArquivo;
            bool instalouPython = false;
            //Variáveis para verificar se há instalação no registro em lm64 e 32 (local machine x64 e x86)
            var lm64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
            var lm32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
            //var cu64 = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64);
            //var cu32 = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry32);

            //CRIAÇÃO DOS DIRETÓRIOS NECESSÁRIOS
            if(!Directory.Exists(vlibrasPath)){
            	Directory.CreateDirectory(vlibrasPath);
            }
            if(!Directory.Exists(bundlesPath)){
                Directory.CreateDirectory(bundlesPath);
            }
            if(!Directory.Exists(pythonPath)){
                Directory.CreateDirectory(pythonPath);
            }

            //EXTRAÇÃO DO VLIBRAS
            Console.WriteLine("Extração do vlibras");
			if(!Requirements.verificarVersao(Path.Combine(dirAtual,@"version.json"), Path.Combine(vlibrasPath,@"version.json"))){
            	try{
	                BundlesManager.ExtractZip(dirAtual, vlibrasPath, "VLIBRAS.zip");
	                File.Copy(Path.Combine(dirAtual,@"version.json"), Path.Combine(vlibrasPath,@"version.json"), true);
        		}catch{
	                Console.WriteLine("Erro na extração do VLibras. Aperte alguma tecla para continuar.");
	                Console.ReadKey();
            	}
            }

            /*try{
                string vlibrasZip = @"VLIBRAS.zip";
                string vlibrasZipAbsolute = vlibrasPath+@"\"+vlibrasZip;
                ZipArchive archive = ZipFile.Open(vlibrasZipAbsolute, ZipArchiveMode.Read, System.Text.Encoding.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.OEMCodePage));
                if(!File.Exists(vlibrasPath+@"\"+@"extraido")){
                    Console.WriteLine("Extraindo do arquivo: "+vlibrasZip);
                    BundlesManager.ExtractToDirectory(archive, vlibrasPath, true);
                    Console.WriteLine("Extração do arquivo "+vlibrasZip+" concluída.");
                    File.Create(vlibrasPath+@"\"+@"extraido").Close();
                }
            }catch(Exception e){
                Console.WriteLine("Erro: {0}\nAperte alguma tecla para continuar.", e);
                Console.ReadKey();
            }*/


            //EXTRAÇÃO DOS REQUISITOS
            /*Console.WriteLine("Extração de Requisitos");
            try{
                string reqZip = @"requisitos.zip";
                string reqZipAbsolute = vlibrasPath+@"\"+reqZip;
                ZipArchive archive = ZipFile.Open(reqZipAbsolute, ZipArchiveMode.Read, System.Text.Encoding.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.OEMCodePage));
                if(!File.Exists(vlibrasPath+@"\"+@"extraidoReq")){
                    Console.WriteLine("Extraindo do arquivo: "+reqZip);
                    BundlesManager.ExtractToDirectory(archive, vlibrasPath, true);
                    Console.WriteLine("Extração do arquivo "+reqZip+" concluída.");
                    File.Create(vlibrasPath+@"\"+@"extraidoReq").Close();
                }
            }catch(Exception e){
                Console.WriteLine("Erro: {0}\nAperte alguma tecla para continuar.", e);
                Console.ReadKey();
            }*/


            //VERIFICAÇÃO E DESINSTALAÇÃO DO VLIBRAS DESCONTINUADO
            Console.WriteLine("Verificação se há versões descontinuadas do VLibras.");
            try{
                RegistryKey[] regVLibrasOld = new RegistryKey[2];
                regVLibrasOld[0] = lm64.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{84B73167-EF7F-42BB-9CCD-E1A8E2C53659-vlibras}_is1");
                regVLibrasOld[1] = lm32.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{84B73167-EF7F-42BB-9CCD-E1A8E2C53659-vlibras}_is1");
                Requirements.Uninstall(regVLibrasOld);
            }catch(Exception e){
                Console.WriteLine("Erro: {0}\nAperte alguma tecla para continuar.", e);
                Console.ReadKey();
            }


            //INSTALAÇÃO DO LAUNCHER DO PYTHON
            //é para ser instalado antes mesmo!!!!!!!
            /*Console.WriteLine("Verificação do launcher");
            try{
                RegistryKey[] regPyLauncher = new RegistryKey[2];
                regPyLauncher[0] = cu64.OpenSubKey(@"Software\Microsoft\Installer\Products\B24C6BC17885FC74FA128928650F54B5");
                regPyLauncher[1] = cu64.OpenSubKey(@"Software\Microsoft\Installer\Products\26D5B8927821F7248B9D4BD406F5F8B6");
                if(!Requirements.IsInstalled(regPyLauncher)){
                    buscaDeArquivo = Directory.GetFiles(dirAtual, "launchwin-1.0.1.6.amd64.msi", SearchOption.AllDirectories);
                    string pyLauncherPath64 = (buscaDeArquivo.Length > 0)? buscaDeArquivo[0]: @"";
                    buscaDeArquivo = Directory.GetFiles(dirAtual, "launchwin-1.0.1.6.msi", SearchOption.AllDirectories);
                    string pyLauncherPath86 = (buscaDeArquivo.Length > 0)? buscaDeArquivo[0]: @""; //O VALOR É 0 MESMO, POIS REALIZOU UMA NOVA BUSCA
                    Requirements.InstallAndWait(pyLauncherPath64, pyLauncherPath86);//, @"/passive"); //instalação passiva
                }
            }catch(Exception e){
                Console.WriteLine("Erro: {0}\nAperte alguma tecla para continuar.", e);
                Console.ReadKey();
            }*/

            //VERIFICAÇÃO E INSTALAÇÃO DO PYTHON
            //REGISTROS DO PYTHON
            /*try{
                RegistryKey[] regPython = new RegistryKey[4];
                regPython[0] = lm64.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9DA28CE5-0AA5-429E-86D8-686ED898C665}");
                regPython[1] = lm32.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9DA28CE5-0AA5-429E-86D8-686ED898C665}");
                regPython[2] = lm32.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{9DA28CE5-0AA5-429E-86D8-686ED898C665}");
                regPython[3] = lm64.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{9DA28CE5-0AA5-429E-86D8-686ED898C665}");

                Console.WriteLine("Verificando se o Python 2.7.12(32) está instalado");
                if(!Requirements.IsInstalled(regPython)){//ChecarVersaoPython()){
                    //PATHS DE INSTALAÇÃO DO PYTHON
                    buscaDeArquivo = Directory.GetFiles(dirAtual, "python-2.7.12.msi", SearchOption.AllDirectories);
                    string pythonPath86 = (buscaDeArquivo.Length > 0)? buscaDeArquivo[0]: @""; //O VALOR É 0 MESMO, POIS REALIZOU UMA NOVA BUSCA
                    Requirements.InstallAndWait(pythonPath86, pythonPath86);//, @"/qn"); //instalação silenciosa
                    instalouPython = true;
                }
            }catch(Exception e){
                Console.WriteLine("Erro: {0}\nAperte alguma tecla para continuar.", e);
                Console.ReadKey();
            }*/


            /*
            //VERIFICAÇÃO E INSTALAÇÃO DE PYWIN32
            //usa esse arquivo para verificação de instalação do pywin32
            Console.WriteLine("Verificando instalação do Pywin32.");
            RegistryKey[] regPywin32 = new RegistryKey[2];
            regPywin32[0] = lm64.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\pywin32-py2.7");
            regPywin32[1] = lm32.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\pywin32-py2.7");
            //string pywin32File = @"..\Bundles\pywin32";
            if(Requirements.IsInstalled(regPython) && !Requirements.IsInstalled(regPywin32)){//File.Exists(pywin32File)){
                buscaDeArquivo = Directory.GetFiles(dirAtual, "pywin32-220.win-amd64-py2.7.exe", SearchOption.AllDirectories);
                string pywin32Pathx64 = (buscaDeArquivo.Length > 0)? buscaDeArquivo[0] : @"";
                buscaDeArquivo = Directory.GetFiles(dirAtual, "pywin32-220.win32-py2.7.exe", SearchOption.AllDirectories);
                string pywin32Pathx86 = (buscaDeArquivo.Length > 0)? buscaDeArquivo[0] : @"";
                Requirements.Install(pywin32Pathx64, pywin32Pathx86);
                //File.Create(pywin32File).Close();
            }
            */


            //VERIFICAÇÃO DA INSTALAÇÃO DO NVDA
            /*
            Console.WriteLine("Verificando instalação do NVDA.");
            //REGISTROS DO NDVA
            RegistryKey[] regNVDA = new RegistryKey[3];
            regNVDA[0] = lm64.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NVDA");
            regNVDA[1] = lm32.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\NVDA");
            //PATH DO INSTALADOR DO NVDA
            if(!Requirements.IsInstalled(regNVDA)){
                buscaDeArquivo = Directory.GetFiles(dirAtual, "nvda_snapshot_source-master-4d792f0.exe", SearchOption.AllDirectories);
                string NVDApath = (buscaDeArquivo.Length > 0)? buscaDeArquivo[0] : @"";
                Requirements.Install(NVDApath, NVDApath);
            }
            */


            //CONFIGURAÇÃO DAS VARIÁVEIS DE AMBIENTE
            Console.WriteLine("Checando as variáveis de ambiente.");
            try{
                ResetEnvVar(vlibrasPath);
            }catch(Exception e){
                Console.WriteLine("Erro Var Env: {0}\nAperte alguma tecla para continuar.", e);
                Console.ReadKey();
            }



            //INSTALAÇÃO DOS MÓDULOS DO PYTHON
            //Tem que ser depois da configuração das variáveis de ambiente
            /*Console.WriteLine("Instalando os módulos de python.");
            try{
                if(instalouPython){
                    //instalação forçada de módulos
                    Requirements.InstallWheels(true);
                }else{
                    Requirements.InstallWheels(false);
                }
            }catch(Exception e){
                Console.WriteLine("Erro na instalação de módulos do python {0}.\nAperte alguma tecla para continuar.", e);
                Console.ReadKey();
            }*/


            //PYTHON PORTÁTIL
            //Download
            /*Console.WriteLine("Baixando cópia portátil do python.");
            try{
                BundlesManager.DownloadFileIfNewer(url, rootPath, "python.zip");
            }catch{
                Console.WriteLine("Erro no download do python. Aperte alguma tecla para continuar.");
                Console.ReadKey();
            }*/
            //Extração
            Console.WriteLine("Extraindo cópia portátil do python.");
			if(!Requirements.verificarVersao(Path.Combine(dirAtual,@"versionPython.json"), Path.Combine(pythonPath,@"versionPython.json"))){
            	try{
	                BundlesManager.ExtractZip(dirAtual, pythonPath, "python.zip");
	                File.Copy(Path.Combine(dirAtual,@"versionPython.json"), Path.Combine(pythonPath,@"versionPython.json"), true);
        		}catch{
	                Console.WriteLine("Erro na extração do VLibras. Aperte alguma tecla para continuar.");
	                Console.ReadKey();
            	}
            }
//            try{
//                BundlesManager.ExtractZip(dirAtual, pythonPath, "python.zip");
//            }catch{
//                Console.WriteLine("Erro na extração do python. Aperte alguma tecla para continuar.");
//                Console.ReadKey();
//            }

            //CRIAÇÃO DO ATALHO DO VLIBRAS
            Console.WriteLine("Criação do atalho do vlibras.");
            try{
                Requirements.criaAtalho(vlibrasPath);
            }catch(Exception e){
                Console.WriteLine("Erro na instalação de módulos do python {0}\nAperte alguma tecla para continuar.", e);
                Console.ReadKey();
            }

            //DOWNLOAD DOS SINAIS
            Console.WriteLine("Baixando lista de sinais");
            try{
	            BundlesManager.DownloadListaSinais(url);
            }catch(Exception e){
            	Console.WriteLine("Erro no download da lista de sinais.\n{0}\nAperte alguma tecla para continuar.",e);
            	Console.ReadKey();
            }

            //BAIXA OS ZIPS DOS SINAIS (1.ZIP, 2.ZIP E ETC...)
            int qtdDeBundles = 0;
            Console.WriteLine("Baixando pacote de sinais.");
            try{
                qtdDeBundles = BundlesManager.DownloadBundlesPackages(url, rootPath, bundlesPath);
            }catch(Exception e){
                Console.WriteLine("Erro no download do pacote de sinais.\n{0}\nAperte alguma tecla para continuar.",e);
                Console.ReadKey();
            }

            //EXTRAÇÃO:
            //EXTRAI APENAS SE NÃO TIVER O ARQUIVO HOMÔNIMO SEM EXTENSÃO NA PASTA SINAIS
            //SE O CAMINHO DE EXTRAÇÃO NÃO EXISTE, ELE SERÁ CRIADO
            Console.WriteLine("Extraindo pacote de sinais.");
            //try{
            BundlesManager.ExtractBundlesPackagesOverWrite(url, rootPath, bundlesPath, qtdDeBundles);
            /*}catch(Exception e){
                Console.WriteLine("Erro na extração: {0}", e);
                Console.ReadKey();
            }*/


            //CONCLUSÃO
            Console.WriteLine("Pré-requisitos verificados.");

			//INICIALIZAÇÃO DO PLAYER
			DialogResult dialogResult = MessageBox.Show(@"Instalação concluída", @"Operação concluída");
			//DialogResult dialogResult = MessageBox.Show("Deseja iniciar o player?", @"Instalação concluída", MessageBoxButtons.YesNo);
			/*if (dialogResult == DialogResult.Yes){
        		if(!File.Exists(lnkPath)){
        			MessageBox.Show("Por favor, execute novamente o Atualizador VLibras e repita o processo.", "Atalho do player não encontrado!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        		}else{
					Directory.SetCurrentDirectory(Path.Combine(dirAtual, @"Player\"));
					ProcessStartInfo info = new ProcessStartInfo(lnkPath);
	        		Process process = Process.Start(info);
        		}
            }else if (dialogResult == DialogResult.No){
                //do something else
            }*/

			//RODA O VLIBRAS

			/*Console.WriteLine("Abrindo player.");
            try{
                Process playerProc = new Process();
                string[] buscaPlayer = Directory.GetFiles(dirAtual, "vlibrasPlayer.exe", SearchOption.AllDirectories);
                string player = buscaPlayer[0];
                playerProc.StartInfo.FileName = player;
                playerProc.EnableRaisingEvents = true;
                playerProc.Start();
                //playerProc.WaitForExit();
            }catch(Exception e){
                Console.WriteLine("Erro: {0}\nAperte alguma tecla para continuar.", e);
                Console.ReadKey();
            }*/

			/*
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
            */

		}
    }
}