diff --git a/AU.csproj b/AU.csproj index e87ee0c..994e173 100644 --- a/AU.csproj +++ b/AU.csproj @@ -7,8 +7,8 @@ {6EB1FB18-7A1B-46E0-9991-A18B3AA32E5C} Exe Properties - VLIBRAS_II - VLIBRAS_II + AtualizadorVLibras + AtualizadorVLibras v4.5 512 true @@ -22,14 +22,15 @@ false true false - http://150.165.205.137:8080/ - http://150.165.205.137:8080/ - VLIBRAS + http://atualizacao.vlibras.lavid.ufpb.br/windows/ + http://atualizacao.vlibras.lavid.ufpb.br/windows/ + Atualizador VLibras LAVID-UFPB - 1.0.0.82 + 5.0.0.0 false - 94 - 1.0.0.%2a + true + 2 + 5.0.0.%2a true true true @@ -44,6 +45,7 @@ DEBUG;TRACE prompt 4 + false AnyCPU @@ -64,7 +66,7 @@ Properties\app.manifest - true + false 2811720AF50392C2792C67C4DEBCB1D40662604A @@ -97,7 +99,9 @@ - + + Component + Form diff --git a/BundlesManager.cs b/BundlesManager.cs index d2bc40b..7f0fc47 100644 --- a/BundlesManager.cs +++ b/BundlesManager.cs @@ -3,10 +3,21 @@ using System.Net; using System.IO; using System.IO.Compression; -namespace VLIBRAS_II +namespace AtualizadorVLibras { + + public class TimeoutWebClient : WebClient{ + protected override WebRequest GetWebRequest(Uri address){ + HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address); + request.Timeout = 3600000; //1 hour timeout + return request; + } + } + static class BundlesManager { + //timeout para verificação de existência e data de última verificação dos pacotes + static int timeout = 2000; public static void ExtractToDirectory(this ZipArchive archive, string destinationDirectoryName, bool overwrite){ if (!overwrite){ @@ -14,59 +25,73 @@ namespace VLIBRAS_II return; } foreach (ZipArchiveEntry file in archive.Entries){ - string completeFileName = Path.Combine(destinationDirectoryName, file.FullName); - string directory = Path.GetDirectoryName(completeFileName); - Console.WriteLine("Extraindo "+file.FullName+"."); - if (!Directory.Exists(directory)){ - Directory.CreateDirectory(directory); - } + try{ + string completeFileName = Path.Combine(destinationDirectoryName, file.FullName); + string directory = Path.GetDirectoryName(completeFileName); + Console.WriteLine("Extraindo "+file.FullName+"."); + if (!Directory.Exists(directory)){ + Directory.CreateDirectory(directory); + } - if (file.Name != ""){ - file.ExtractToFile(completeFileName, true); + if (file.Name != ""){ + file.ExtractToFile(completeFileName, true); + } + }catch(Exception e){ + Console.WriteLine("Erro na extração: {0}",e); + continue; } } } - private static bool RemoteFileExists(string url){ + //File.Exists(path); + + private static bool RemoteFileExists(string url){ + bool result = false; + var request = (HttpWebRequest)WebRequest.Create(url); + request.Method = "HEAD"; + request.Timeout = timeout; + HttpWebResponse response = null; try{ - //Creating the HttpWebRequest - HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; - //Setting the Request method HEAD - request.Method = "HEAD"; - request.Timeout = 2000; - //Getting the Web Response. - HttpWebResponse response = request.GetResponse() as HttpWebResponse; - //Returns TURE if the Status code == 200 - return (response.StatusCode == HttpStatusCode.OK); - } - catch{ - //Any exception will returns false. - return false; + response = (HttpWebResponse)request.GetResponse(); + result = (response.StatusCode == HttpStatusCode.OK); + }catch(Exception e){ + //Console.WriteLine("Arquivo não existe no servidor: {0}",e); + }finally{ + if(response != null){ + response.Close(); + } } + return result; } - //File.Exists(path); - private static bool RemoteIsNewerThanLocal(string url, string path){ + bool result = false;//resultado padrão + //informações do arquivo FileInfo sourceFile = new FileInfo(path); + //solicitação do arquivo remoto var request = (HttpWebRequest)WebRequest.Create(url); request.Method = "HEAD"; - var response = (HttpWebResponse)request.GetResponse(); - //Console.WriteLine("response.LastModified: "+response.LastModified); - //Console.WriteLine("sourceFile.LastWriteTime: "+sourceFile.LastWriteTime); - if(response.LastModified > sourceFile.LastWriteTime){ - return true; - }else{ - return false; + request.Timeout = timeout; + HttpWebResponse response = null; + try{ + response = (HttpWebResponse)request.GetResponse(); + result = (response.LastModified > sourceFile.LastWriteTime); + }catch(Exception e){ + //Console.WriteLine("Erro: {0}",e); + }finally{ + if(response != null){ + response.Close(); + } } + return result; } private static void DownloadFileToPath(string site, string path){ try{ - WebClient webClient = new WebClient(); + TimeoutWebClient webClient = new TimeoutWebClient(); webClient.DownloadFile(site, path); }catch(Exception e){ - Console.WriteLine("Erro: {0}", e); + Console.WriteLine("Erro: {0}\nAperte alguma tecla para continuar.", e); } } @@ -79,6 +104,7 @@ namespace VLIBRAS_II string remote; string local; while(true){ + Console.WriteLine("Verificando arquivo "+i+"zip dos pacotes de sinais."); remote = url+i.ToString()+ext; local = rootPath+i.ToString()+ext; if(!RemoteFileExists(remote)){ @@ -87,9 +113,11 @@ namespace VLIBRAS_II break; }else{ if(!File.Exists(local)){ + Console.WriteLine("Baixando o "+i+"o pacote de sinais."); DownloadFileToPath(remote, local); }else{ if(RemoteIsNewerThanLocal(remote, local)){ + Console.WriteLine("Houve um patch nesse pacote: baixando o "+i+"o pacote de sinais."); DownloadFileToPath(remote, local); //DELETA ARQUIVO DE VERIFICAÇÃO PARA QUE HAJA NOVA EXTRAÇÃO File.Delete(extractPath + i); @@ -101,7 +129,7 @@ namespace VLIBRAS_II return i; } - public static void ExtractBundlesPackages(string rootPath, string extractPath, int qtd){ + /*public static void ExtractBundlesPackages(string rootPath, string extractPath, int qtd){ string ext = @".zip"; bool exists = System.IO.Directory.Exists(extractPath); if(!exists){ @@ -120,9 +148,10 @@ namespace VLIBRAS_II } qtd--; } - } + }*/ + //ZipArchive archive = ZipFile.Open(fileAbsolute, ZipArchiveMode.Read, System.Text.Encoding.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.OEMCodePage)); - public static void ExtractBundlesPackagesOverWrite(string rootPath, string extractPath, int qtd){ + public static void ExtractBundlesPackagesOverWrite(string rootPath, string extractPath, int qtd, string url){ string ext = @".zip"; bool exists = System.IO.Directory.Exists(extractPath); if(!exists){ @@ -130,18 +159,25 @@ namespace VLIBRAS_II } while(qtd > 0){ - if(!File.Exists(extractPath+qtd.ToString())){ - string fileAbsolute = rootPath+qtd.ToString()+ext; - ZipArchive zip = ZipFile.Open(fileAbsolute, ZipArchiveMode.Read, System.Text.Encoding.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.OEMCodePage)); - Console.WriteLine("Extraindo o arquivo: "+zip); - //ZipFile.ExtractToDirectory(zip, extractPath); - ExtractToDirectory(zip, extractPath, true); - //CRIA UM ARQUIVO 1(SEM EXTENSÃO), 2, 3... NA PASTA BUNDLES PARA VERIFICAÇÃO DE EXTRAÇÃO PRÉVIA - //SÓ É CRIADO APÓS EXTRAÇÃO DE TODOS OS ARQUIVOS DE CADA ZIP - Console.WriteLine("Extração do arquivo "+zip+" concluída."); - File.Create(extractPath+qtd).Close(); - } + try{ + if(!File.Exists(extractPath+qtd.ToString())){ + string fileAbsolute = rootPath+qtd.ToString()+ext; + ZipArchive zip = ZipFile.Open(fileAbsolute, ZipArchiveMode.Read, System.Text.Encoding.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.OEMCodePage)); + Console.WriteLine("Extraindo o arquivo: "+zip); + //ZipFile.ExtractToDirectory(zip, extractPath); + ExtractToDirectory(zip, extractPath, true); + //CRIA UM ARQUIVO 1(SEM EXTENSÃO), 2, 3... NA PASTA BUNDLES PARA VERIFICAÇÃO DE EXTRAÇÃO PRÉVIA + //SÓ É CRIADO APÓS EXTRAÇÃO DE TODOS OS ARQUIVOS DE CADA ZIP + Console.WriteLine("Extração do arquivo "+zip+" concluída."); + File.Create(extractPath+qtd).Close(); + } qtd--; + }catch(Exception e){ + Console.WriteLine("Erro na extração do "+qtd.ToString()+ext+"\nErro: {0}",e); + Console.WriteLine("Tentando baixar novamente o arquivo: "+qtd.ToString()+ext); + DownloadFileToPath(url+qtd.ToString()+ext, rootPath+qtd.ToString()+ext); + continue; + } } } } diff --git a/Program.cs b/Program.cs index 9b00838..83794ee 100644 --- a/Program.cs +++ b/Program.cs @@ -5,12 +5,12 @@ using Microsoft.Win32; using System.IO; using System.IO.Compression; -namespace VLIBRAS_II +namespace AtualizadorVLibras { static class Program { static void ResetEnvVar(){ - string vLibrasAtual = Environment.GetEnvironmentVariable("PATH_VLIBRAS",EnvironmentVariableTarget.Machine); + string vLibrasAtual = Environment.GetEnvironmentVariable("PATH_VLIBRAS",EnvironmentVariableTarget.User); string vLibrasNovo = Directory.GetCurrentDirectory(); if(!vLibrasNovo.Equals(vLibrasAtual)){ @@ -36,66 +36,111 @@ namespace VLIBRAS_II static void Main() { //ENDEREÇO DE ONDE SERÃO BAIXADOS OS PACOTES (.ZIP) DE SINAIS (1.ZIP, 2.ZIP E ETC...) - string url = @"http://150.165.205.137:8080/"; + string url = @"http://atualizacao.vlibras.lavid.ufpb.br/windows/"; + //string url = @"http://179.185.184.75:8080/"; + string dirAtual = Directory.GetCurrentDirectory(); 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); //EXTRAÇÃO DO VLIBRAS - string vlibrasZip = @"VLIBRAS.zip"; - string vlibrasZipAbsolute = dirAtual+@"\"+vlibrasZip; - ZipArchive archive = ZipFile.Open(vlibrasZipAbsolute, ZipArchiveMode.Read, System.Text.Encoding.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.OEMCodePage)); - if(!File.Exists(dirAtual+@"\"+@"extraido")){ - Console.WriteLine("Extraindo do arquivo: "+vlibrasZip); - BundlesManager.ExtractToDirectory(archive, dirAtual, true); - Console.WriteLine("Extração do arquivo "+vlibrasZip+" concluída."); - File.Create(dirAtual+@"\"+@"extraido").Close(); + Console.WriteLine("Extração do vlibras"); + try{ + string vlibrasZip = @"VLIBRAS.zip"; + string vlibrasZipAbsolute = dirAtual+@"\"+vlibrasZip; + ZipArchive archive = ZipFile.Open(vlibrasZipAbsolute, ZipArchiveMode.Read, System.Text.Encoding.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.OEMCodePage)); + if(!File.Exists(dirAtual+@"\"+@"extraido")){ + Console.WriteLine("Extraindo do arquivo: "+vlibrasZip); + BundlesManager.ExtractToDirectory(archive, dirAtual, true); + Console.WriteLine("Extração do arquivo "+vlibrasZip+" concluída."); + File.Create(dirAtual+@"\"+@"extraido").Close(); + } + }catch(Exception e){ + Console.WriteLine("Erro: {0}\nAperte alguma tecla para continuar.", e); + Console.ReadKey(); } //EXTRAÇÃO DOS REQUISITOS - string reqZip = @"requisitos.zip"; - string reqZipAbsolute = dirAtual+@"\"+reqZip; - archive = ZipFile.Open(reqZipAbsolute, ZipArchiveMode.Read, System.Text.Encoding.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.OEMCodePage)); - if(!File.Exists(dirAtual+@"\"+@"extraidoReq")){ - Console.WriteLine("Extraindo do arquivo: "+reqZip); - BundlesManager.ExtractToDirectory(archive, dirAtual, true); - Console.WriteLine("Extração do arquivo "+reqZip+" concluída."); - File.Create(dirAtual+@"\"+@"extraidoReq").Close(); + Console.WriteLine("Extração de Requisitos"); + try{ + string reqZip = @"requisitos.zip"; + string reqZipAbsolute = dirAtual+@"\"+reqZip; + ZipArchive archive = ZipFile.Open(reqZipAbsolute, ZipArchiveMode.Read, System.Text.Encoding.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.OEMCodePage)); + if(!File.Exists(dirAtual+@"\"+@"extraidoReq")){ + Console.WriteLine("Extraindo do arquivo: "+reqZip); + BundlesManager.ExtractToDirectory(archive, dirAtual, true); + Console.WriteLine("Extração do arquivo "+reqZip+" concluída."); + File.Create(dirAtual+@"\"+@"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."); - //x64 - 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); + 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(); + } - //REGISTROS DO PYTHON - RegistryKey[] regPython = new RegistryKey[4]; - regPython[0] = lm64.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{79F081BF-7454-43DB-BD8F-9EE596813232}"); - regPython[1] = lm64.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{79F081BF-7454-43DB-BD8F-9EE596813233}"); - regPython[2] = lm32.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{79F081BF-7454-43DB-BD8F-9EE596813232}"); - regPython[3] = lm32.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{79F081BF-7454-43DB-BD8F-9EE596813233}"); + //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 - Console.WriteLine("Verificando se o Python 2.7.9 está instalado"); - if(!Requirements.IsInstalled(regPython)){ - //PATHS DE INSTALAÇÃO DO PYTHON - buscaDeArquivo = Directory.GetFiles(dirAtual, "python-2.7.9.amd64.msi", SearchOption.AllDirectories); - string pythonPath64 = (buscaDeArquivo.Length > 0)? buscaDeArquivo[0]: @""; - buscaDeArquivo = Directory.GetFiles(dirAtual, "python-2.7.9.msi", SearchOption.AllDirectories); - string pythonPath86 = (buscaDeArquivo.Length > 0)? buscaDeArquivo[0]: @""; //O VALOR É 0 MESMO, POIS REALIZOU UMA NOVA BUSCA - Requirements.InstallAndWait(pythonPath64, pythonPath86); + //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."); @@ -111,9 +156,11 @@ namespace VLIBRAS_II 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]; @@ -125,6 +172,7 @@ namespace VLIBRAS_II string NVDApath = (buscaDeArquivo.Length > 0)? buscaDeArquivo[0] : @""; Requirements.Install(NVDApath, NVDApath); } + */ //CONFIGURAÇÃO DAS VARIÁVEIS DE AMBIENTE @@ -132,7 +180,34 @@ namespace VLIBRAS_II try{ ResetEnvVar(); }catch(Exception e){ - Console.WriteLine("Erro Var Env: {0}", 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(); + } + + //CRIAÇÃO DO ATALHO DO VLIBRAS + Console.WriteLine("Criação do atalho do vlibras."); + try{ + Requirements.criaAtalho(); + }catch(Exception e){ + Console.WriteLine("Erro na instalação de módulos do python {0}\nAperte alguma tecla para continuar.", e); + Console.ReadKey(); } @@ -145,7 +220,8 @@ namespace VLIBRAS_II try{ qtdDeBundles = BundlesManager.DownloadBundlesPackages(url, rootPath, extractPath); }catch(Exception e){ - Console.WriteLine("Erro no download do pacote de sinais."); + Console.WriteLine("Erro no download do pacote de sinais.\n{0}\nAperte alguma tecla para continuar.",e); + Console.ReadKey(); } @@ -153,11 +229,12 @@ namespace VLIBRAS_II //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(rootPath, extractPath, qtdDeBundles); - }catch(Exception e){ - Console.WriteLine("Erro na extração"); - } + //try{ + BundlesManager.ExtractBundlesPackagesOverWrite(rootPath, extractPath, qtdDeBundles, url); + /*}catch(Exception e){ + Console.WriteLine("Erro na extração: {0}", e); + Console.ReadKey(); + }*/ //CONCLUSÃO @@ -165,6 +242,8 @@ namespace VLIBRAS_II //RODA O VLIBRAS + + /*Console.WriteLine("Abrindo player."); try{ Process playerProc = new Process(); string[] buscaPlayer = Directory.GetFiles(dirAtual, "vlibrasPlayer.exe", SearchOption.AllDirectories); @@ -174,8 +253,9 @@ namespace VLIBRAS_II playerProc.Start(); //playerProc.WaitForExit(); }catch(Exception e){ - Console.WriteLine("Erro: {0}", e); - } + Console.WriteLine("Erro: {0}\nAperte alguma tecla para continuar.", e); + Console.ReadKey(); + }*/ /* Application.EnableVisualStyles(); diff --git a/Requirements.cs b/Requirements.cs index f8df13e..38f5f80 100644 --- a/Requirements.cs +++ b/Requirements.cs @@ -1,7 +1,9 @@ using System; +using System.IO; +using System.Diagnostics; using Microsoft.Win32; -namespace VLIBRAS_II +namespace AtualizadorVLibras { class Requirements { @@ -26,9 +28,9 @@ namespace VLIBRAS_II foreach(RegistryKey reg in regs){ if(IsInstalled(reg)){ try{ - System.Diagnostics.Process uninsProc = new System.Diagnostics.Process(); - System.Diagnostics.ProcessStartInfo uninsProcInfo = new System.Diagnostics.ProcessStartInfo(); - uninsProcInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; + Process uninsProc = new Process(); + ProcessStartInfo uninsProcInfo = new ProcessStartInfo(); + uninsProcInfo.WindowStyle = ProcessWindowStyle.Hidden; uninsProcInfo.FileName = "cmd.exe"; string comandoUnins; comandoUnins = "/C" + reg.GetValue("QuietUninstallString").ToString().Replace("\"", ""); @@ -36,13 +38,208 @@ namespace VLIBRAS_II uninsProc.StartInfo = uninsProcInfo; uninsProc.Start(); //uninsProc.WaitForExit(); - }catch(Exception e){ + }catch(Exception){ //NOTHING } } } } + //CRIA ATALHO + public static void criaAtalho(){ + //string driveAtual = @"%HOMEPATH%\..\.."; + //string pathPython2 = driveAtual+@"Python27\python.exe"; + //string pathPython2 = Environment.GetEnvironmentVariable("PYTHONPATH", EnvironmentVariableTarget.Machine); + string pathPython2 = GetRegistroPythonPath(); + int idx = pathPython2.IndexOf(@";"); + //pathPython2 = pathPython2.Remove(idx, pathPython2.Length - idx); + //pathPython2 = "\""+pathPython2 + "\\python.exe\""; + + //Console.WriteLine("VERIFICAÇÃO DA LINHA criaAtalho: "+pathPython2); + //Console.ReadKey(); + + ProcessStartInfo procInfo = new ProcessStartInfo(); + procInfo.FileName = pathPython2;//"cmd.exe"; + //procInfo.Arguments = "/C py -2 "+Directory.GetCurrentDirectory()+@"\criaLnk.py"; + //procInfo.Arguments = "/C "+pathPython2+" -m "+Directory.GetCurrentDirectory()+@"\criaLnk.py"; + //procInfo.Arguments = "/C "+pathPython2+" \""+Directory.GetCurrentDirectory()+"\\criaLnk.py\""; + procInfo.Arguments = "\""+Directory.GetCurrentDirectory()+@"\criaLnk.py"; + procInfo.UseShellExecute = false; + procInfo.RedirectStandardOutput = true; + procInfo.WindowStyle = ProcessWindowStyle.Hidden; + + //Process process = new Process(); + //process.StartInfo = procInfo; + //process.Start(); + using(Process process = Process.Start(procInfo)){ + using(StreamReader reader = process.StandardOutput){ + string result = reader.ReadToEnd(); + Console.Write(result); + } + process.WaitForExit(); + } + //Console.WriteLine("pausa: {0}",procInfo.Arguments); + //Console.ReadKey(); + } + + public static string GetRegistroPythonPath(){ + var lm64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); + var lm32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32); + var cr64 = RegistryKey.OpenBaseKey(RegistryHive.ClassesRoot, RegistryView.Registry64); + var cr32 = RegistryKey.OpenBaseKey(RegistryHive.ClassesRoot, RegistryView.Registry32); + var cu64 = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64); + var cu32 = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry32); + + RegistryKey pythonReg = null; + if(lm64.OpenSubKey(@"SOFTWARE\Python\PythonCore\2.7\InstallPath") != null){ + pythonReg = lm64.OpenSubKey(@"SOFTWARE\Python\PythonCore\2.7\InstallPath"); + } + if(lm32.OpenSubKey(@"SOFTWARE\Python\PythonCore\2.7\InstallPath") != null){ + pythonReg = lm32.OpenSubKey(@"SOFTWARE\Python\PythonCore\2.7\InstallPath"); + } + if(cu64.OpenSubKey(@"SOFTWARE\Python\PythonCore\2.7\InstallPath") != null){ + pythonReg = cu64.OpenSubKey(@"SOFTWARE\Python\PythonCore\2.7\InstallPath"); + } + if(cu32.OpenSubKey(@"SOFTWARE\Python\PythonCore\2.7\InstallPath") != null){ + pythonReg = cu32.OpenSubKey(@"SOFTWARE\Python\PythonCore\2.7\InstallPath"); + } + if(lm64.OpenSubKey(@"SOFTWARE\Wow6432Node\Python\PythonCore\2.7\InstallPath") != null){ + pythonReg = lm64.OpenSubKey(@"SOFTWARE\Wow6432Node\Python\PythonCore\2.7\InstallPath"); + } + if(lm32.OpenSubKey(@"SOFTWARE\Wow6432Node\Python\PythonCore\2.7\InstallPath") != null){ + pythonReg = lm32.OpenSubKey(@"SOFTWARE\Wow6432Node\Python\PythonCore\2.7\InstallPath"); + } + if(cu64.OpenSubKey(@"SOFTWARE\Wow6432Node\Python\PythonCore\2.7\InstallPath") != null){ + pythonReg = cu64.OpenSubKey(@"SOFTWARE\Wow6432Node\Python\PythonCore\2.7\InstallPath"); + } + if(cu32.OpenSubKey(@"SOFTWARE\Wow6432Node\Python\PythonCore\2.7\InstallPath") != null){ + pythonReg = cu32.OpenSubKey(@"SOFTWARE\Wow6432Node\Python\PythonCore\2.7\InstallPath"); + } + if(pythonReg != null){ + //CONIFGURAÇÃO DA VARIÁVEL PYTHONPATH + string python = pythonReg.GetValue(null).ToString(); + //python = python.Remove(python.Length - 1).ToString(); + return "\""+python+@"python.exe"+"\""; + }else{ + return ""; + } + } + + //INSTALA, SE NECESSÁRIO, OS MÓDULOS DO PYTHON + public static void InstallWheels(bool force){ + /*var cr64 = RegistryKey.OpenBaseKey(RegistryHive.ClassesRoot, RegistryView.Registry64); + var cr32 = RegistryKey.OpenBaseKey(RegistryHive.ClassesRoot, RegistryView.Registry32); + RegistryKey pythonShell = cr64.OpenSubKey(@"Python.File\Shell\open\command"); + if(pythonShell == null){ + pythonShell = cr32.OpenSubKey(@"Python.File\Shell\open\command"); + } + path do python na máquina + string pythonCMD = pythonShell.GetValue(null).ToString(); + pythonCMD = pythonCMD.Remove(pythonCMD.Length - 9).Replace("\"", ""); + procInfo.FileName = pythonCMD;*/ + + //INFORMAÇÕES SOBRE O PROCESSO QUE VAI SER INICIADO + //string driveAtual = @"%HOMEPATH%\..\.."; + //string pathPython2 = driveAtual+@"Python27\python.exe"; + + //string pathPython2 = Environment.GetEnvironmentVariable("PYTHONPATH", EnvironmentVariableTarget.Machine); + string pathPython2 = GetRegistroPythonPath(); + int idx = pathPython2.IndexOf(@";"); + //pathPython2 = pathPython2.Remove(idx, pathPython2.Length - idx); + //pathPython2 = "\""+pathPython2 + "\\python.exe\""; + + //Console.WriteLine("VERIFICAÇÃO DA LINHA insWhls: "+pathPython2); + //Console.ReadKey(); + //ATUALIZAÇÃO DO PIP + ProcessStartInfo procInfo = new ProcessStartInfo(); + //procInfo.FileName = "py"; + //procInfo.Arguments = "-2 -m pip install --upgrade pip"; + procInfo.FileName = pathPython2; + procInfo.Arguments = "-m pip install --upgrade pip"; + procInfo.UseShellExecute = false; + procInfo.RedirectStandardOutput = true; + procInfo.WindowStyle = ProcessWindowStyle.Hidden; + + //Process process = new Process(); + //process.StartInfo = procInfo; + //process.Start(); + //process.WaitForExit(); + using(Process process = Process.Start(procInfo)){ + using(StreamReader reader = process.StandardOutput){ + string result = reader.ReadToEnd(); + Console.Write(result); + } + process.WaitForExit(); + } + Console.WriteLine("Pip atualizado."); + Console.WriteLine("Instalando os módulos. Isso pode levar alguns minutos. Por favor, aguarde."); + //INSTALAÇÃO DOS MÓDULOS + if(force){ + //instalação forçada + //procInfo.Arguments = "-2 "+Directory.GetCurrentDirectory()+@"\checkwheels.py --force"; + //procInfo.Arguments = "-m "+Directory.GetCurrentDirectory()+@"\checkwheels.py --force"; + procInfo.Arguments = "\""+Directory.GetCurrentDirectory()+@"\checkwheels.py"+"\""+" --force"; + }else{ + //procInfo.Arguments = "-2 "+Directory.GetCurrentDirectory()+@"\checkwheels.py"; + //procInfo.Arguments = "-m "+Directory.GetCurrentDirectory()+@"\checkwheels.py"; + procInfo.Arguments = "\""+Directory.GetCurrentDirectory()+@"\checkwheels.py"+"\""; + } + //Console.WriteLine("VERIFICAÇÃO DA LINHA insWhls2: "+procInfo.Arguments); + //Console.ReadKey(); + //process = new Process(); + //process.StartInfo = procInfo; + //process.Start(); + //process.WaitForExit(); + using(Process process = Process.Start(procInfo)){ + using(StreamReader reader = process.StandardOutput){ + string result = reader.ReadToEnd(); + Console.Write(result); + } + process.WaitForExit(); + } + } + + + //SE FOR USAR BOTAR PYTHONPATH2 ENTRE ASPAS!!!!!!!!!! + /*public static bool ChecarVersaoPython(){ + string driveAtual = @"%HOMEPATH%\..\.."; + string pathPython2 = driveAtual+@"Python27\python.exe"; + + //string comandoIns = "/C py -2 --version"; + string comandoIns = @"/C "+"\""pathPython2+"\""+" --version"; + //Process e Process Information + ProcessStartInfo insProcInfo = new ProcessStartInfo(); + Process insProc = new Process(); + + insProcInfo.WindowStyle = ProcessWindowStyle.Hidden; + insProcInfo.FileName = "cmd.exe"; + insProcInfo.Arguments = comandoIns; + insProcInfo.UseShellExecute = false; + insProcInfo.CreateNoWindow = true; + insProcInfo.RedirectStandardError = true; + //insProcInfo.Verb = "runas"; //ADM + + insProc.StartInfo = insProcInfo; + insProc.Start(); + string output = insProc.StandardError.ReadToEnd(); + insProc.WaitForExit(); + if(output == null || output == ""){ + return false; + } + output = output.Remove(output.Length-2); + string version = output.Replace("Python ", ""); + string majorMinorVersion = version.Remove(3); + if(majorMinorVersion.Equals("2.7")){ + string patchVersion = version.Replace("2.7.",""); + int x = -1; + int.TryParse(patchVersion, out x); + if(x >= 9){ + return true; + } + } + return false; + }*/ + public static void Install(string pathInstaller64, string pathInstaller86){ string pathInstaller; if(Environment.Is64BitOperatingSystem){ @@ -53,12 +250,13 @@ namespace VLIBRAS_II if(pathInstaller == ""){ return; } - string comandoIns = "/C" + pathInstaller; + //string comandoIns = "/C" + pathInstaller + " -s -v -qn"; + string comandoIns = @"msiexec /i "+"\""+pathInstaller+"\""+@" /quiet /qn /norestart"; //Process e Process Information - System.Diagnostics.ProcessStartInfo insProcInfo = new System.Diagnostics.ProcessStartInfo(); - insProcInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; - System.Diagnostics.Process insProc = new System.Diagnostics.Process(); + ProcessStartInfo insProcInfo = new ProcessStartInfo(); + Process insProc = new Process(); + insProcInfo.WindowStyle = ProcessWindowStyle.Hidden; insProcInfo.FileName = "cmd.exe"; insProcInfo.Arguments = comandoIns; //insProcInfo.Verb = "runas"; //ADM @@ -68,7 +266,7 @@ namespace VLIBRAS_II //insProc.WaitForExit(); } - public static void InstallAndWait(string pathInstaller64, string pathInstaller86){ + public static void Install(string pathInstaller64, string pathInstaller86, string args){ string pathInstaller; if(Environment.Is64BitOperatingSystem){ pathInstaller = pathInstaller64; @@ -78,18 +276,72 @@ namespace VLIBRAS_II if(pathInstaller == ""){ return; } - string comandoIns = "/C" + pathInstaller; + //string comandoIns = "/C" + pathInstaller + " -s -v -qn"; + string comandoIns = @"msiexec /i "+"\""+pathInstaller+"\" "+args; //Process e Process Information - System.Diagnostics.ProcessStartInfo insProcInfo = new System.Diagnostics.ProcessStartInfo(); - insProcInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; - System.Diagnostics.Process insProc = new System.Diagnostics.Process(); + ProcessStartInfo insProcInfo = new ProcessStartInfo(); + Process insProc = new Process(); + insProcInfo.WindowStyle = ProcessWindowStyle.Hidden; insProcInfo.FileName = "cmd.exe"; insProcInfo.Arguments = comandoIns; //insProcInfo.Verb = "runas"; //ADM insProc.StartInfo = insProcInfo; insProc.Start(); + //insProc.WaitForExit(); + } + + public static void InstallAndWait(string pathInstaller64, string pathInstaller86){ + string pathInstaller; + if(Environment.Is64BitOperatingSystem){ + pathInstaller = pathInstaller64; + }else{ + pathInstaller = pathInstaller86; + } + if(pathInstaller == ""){ + return; + } + //string comandoIns = "/C" + pathInstaller + " -s -v -qn"; + string comandoIns = @"/i "+"\""+pathInstaller+"\""; + //Process e Process Information + ProcessStartInfo insProcInfo = new ProcessStartInfo(); + //insProcInfo.WindowStyle = ProcessWindowStyle.Hidden; + Process insProc = new Process(); + + insProcInfo.FileName = "msiexec"; + insProcInfo.Arguments = comandoIns; + //insProcInfo.Verb = "runas"; //ADM + //Console.WriteLine("VERIFICAÇÃO DE LINHA insWait: "+ insProcInfo.Arguments); + //Console.ReadKey(); + insProc.StartInfo = insProcInfo; + insProc.Start(); + insProc.WaitForExit(); + } + //qn - instalação sem interface, passive instalação passiva + public static void InstallAndWait(string pathInstaller64, string pathInstaller86, string args){ + string pathInstaller; + if(Environment.Is64BitOperatingSystem){ + pathInstaller = pathInstaller64; + }else{ + pathInstaller = pathInstaller86; + } + if(pathInstaller == ""){ + return; + } + //string comandoIns = "/C" + pathInstaller + " -s -v -qn"; + string comandoIns = @"/i "+"\""+pathInstaller+"\" "+args; + //Process e Process Information + ProcessStartInfo insProcInfo = new ProcessStartInfo(); + //insProcInfo.WindowStyle = ProcessWindowStyle.Hidden; + Process insProc = new Process(); + + insProcInfo.FileName = "msiexec"; + insProcInfo.Arguments = comandoIns; + //insProcInfo.Verb = "runas"; //ADM + + insProc.StartInfo = insProcInfo; + insProc.Start(); insProc.WaitForExit(); } -- libgit2 0.21.2