From 40849d9f981c448865fe48635909828017100ce6 Mon Sep 17 00:00:00 2001 From: CaioMoraes Date: Thu, 29 Sep 2016 11:22:16 -0300 Subject: [PATCH] Adicionei download e extração de sinais. --- AU.csproj | 175 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Program.cs | 379 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 554 insertions(+), 0 deletions(-) create mode 100644 AU.csproj create mode 100644 Program.cs diff --git a/AU.csproj b/AU.csproj new file mode 100644 index 0000000..7207bd6 --- /dev/null +++ b/AU.csproj @@ -0,0 +1,175 @@ + + + + + Debug + AnyCPU + {6EB1FB18-7A1B-46E0-9991-A18B3AA32E5C} + Exe + Properties + VLIBRAS_II + VLIBRAS_II + v4.5 + 512 + true + C:\Users\Caio Moraes\Documents\AU\release\ + true + Web + true + Foreground + 7 + Days + false + true + false + http://150.165.205.137:8080/ + http://150.165.205.137:8080/ + VLIBRAS + LAVID-UFPB + 1.0.0.67 + false + 77 + 1.0.0.%2a + true + true + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + LocalIntranet + + + true + + + Properties\app.manifest + + + true + + + 2811720AF50392C2792C67C4DEBCB1D40662604A + + + AU_5_TemporaryKey.pfx + + + http://timestamp.verisign.com/scripts/timstamp.dll + + + icon_vlibras.ico + + + + + + + + + + + + + + + + + + + + + Form + + + Form1.cs + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + + Designer + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + %(RecursiveDir)%(Filename)%(Extension) + false + + + %(RecursiveDir)%(Filename)%(Extension) + false + + + + + + False + Microsoft .NET Framework 4.5 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + false + + + \ No newline at end of file diff --git a/Program.cs b/Program.cs new file mode 100644 index 0000000..ca0886a --- /dev/null +++ b/Program.cs @@ -0,0 +1,379 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Diagnostics; +using System.Security.Permissions; +using Microsoft.Win32; +using System.Net; +using System.Collections; +using System.IO; +using System.IO.Compression; + +namespace AU +{ + static class Program + { + public static bool RemoteFileExists(string url){ + try{ + //Creating the HttpWebRequest + HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; + //Setting the Request method HEAD + request.Method = "HEAD"; + //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; + } + } + + //File.Exists(path); + + public static bool RemoteIsNewerThanLocal(string url, string path){ + FileInfo sourceFile = new FileInfo(path); + 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; + } + } + + public static void DownloadFileToPath(string site, string path){ + try{ + WebClient webClient = new WebClient(); + webClient.DownloadFile(site, path); + }catch(Exception e){ + Console.WriteLine("Erro: {0}", e); + } + } + static void ResetEnvVar(){ + string vLibrasAtual = Environment.GetEnvironmentVariable("PATH_VLIBRAS",EnvironmentVariableTarget.Machine); + 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(Directory.GetCurrentDirectory(), "ResetEnvVar.exe", SearchOption.AllDirectories); + string resetPath = buscaReset[0]; + + System.Diagnostics.ProcessStartInfo resetProcInfo = new System.Diagnostics.ProcessStartInfo(); + resetProcInfo.FileName = resetPath; + resetProcInfo.Verb = "runas"; //ADM + //resetProcInfo.Arguments = comandoUnins; + + System.Diagnostics.Process resetProc = new System.Diagnostics.Process(); + resetProc.StartInfo = resetProcInfo; + resetProc.Start(); + resetProc.WaitForExit(); + } + } + + static void desinstalarVLibras(RegistryKey reg){ + //Variáveis para desinstalação + System.Diagnostics.Process uninsProc = new System.Diagnostics.Process(); + System.Diagnostics.ProcessStartInfo uninsProcInfo = new System.Diagnostics.ProcessStartInfo(); + //uninsProcInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; + uninsProcInfo.FileName = "cmd.exe"; + string comandoUnins; + comandoUnins = "/C" + reg.GetValue("QuietUninstallString").ToString().Replace("\"", ""); + uninsProcInfo.Arguments = comandoUnins; + uninsProc.StartInfo = uninsProcInfo; + uninsProc.Start(); + uninsProc.WaitForExit(); + } + + static void instalarPython(int opSys){ + //Console.WriteLine("Por favor, confirme a instalação do Python 2.7.9"); + string[] buscaPython; + if(opSys == 64){ + buscaPython = Directory.GetFiles(Directory.GetCurrentDirectory(), "python-2.7.9.amd64.msi", SearchOption.AllDirectories); + }else{ + buscaPython = Directory.GetFiles(Directory.GetCurrentDirectory(), "python-2.7.9.msi", SearchOption.AllDirectories); + } + string pythonPath = buscaPython[0]; + string comandoIns = "/C" + pythonPath; + + System.Diagnostics.ProcessStartInfo insProcInfo = new System.Diagnostics.ProcessStartInfo(); + System.Diagnostics.Process insProc = new System.Diagnostics.Process(); + + insProcInfo.FileName = "cmd.exe"; + insProcInfo.Arguments = comandoIns; + //insProcInfo.Verb = "runas"; //ADM + + insProc.StartInfo = insProcInfo; + insProc.Start(); + insProc.WaitForExit(); + + } + + [STAThread] + static void Main() + { + + //VERFICAÇÃO E DESINSTALAÇÃO DO VLIBRAS DESCONTINUADO + //Variáveis para verificar se há instalação no registro + var lm64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); + var lm32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32); + RegistryKey reg; + RegistryKey reg2; + RegistryKey reg3; + RegistryKey reg4; + + bool tentouX64 = false; + Console.WriteLine("Verificação se há versões descontinuadas do VLibras."); + //x64 + try{ + reg = lm64.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{84B73167-EF7F-42BB-9CCD-E1A8E2C53659-vlibras}_is1"); + if(reg == null){ + Console.WriteLine("Chave do 64 é nula."); + Console.WriteLine("UninstallString 64: nenhum."); + Console.WriteLine("QuietUninstallString 64: nenhum."); + }else{ + tentouX64 = true; + Console.WriteLine("Chave: "+reg.ToString()); + Console.WriteLine("UninstallString 64: "+reg.GetValue("UninstallString").ToString().Replace("\"", "")); + Console.WriteLine("QuietUninstallString 64: "+reg.GetValue("QuietUninstallString").ToString().Replace("\"", "")); + //desinstalação da versão x64 + Console.WriteLine("Desinstalando a versão descontinuada do VLibras x64. Por favor, aguarde."); + desinstalarVLibras(reg); + //Console.WriteLine("Desinstalou a versão descontinuada do VLibras x64."); + } + }catch(Exception e){ + Console.WriteLine("Erro x64: {0}",e); + } + + Console.WriteLine(""); + + //x86 + if(!tentouX64){ + try{ + reg = lm32.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{84B73167-EF7F-42BB-9CCD-E1A8E2C53659-vlibras}_is1"); + if(reg == null){ + Console.WriteLine("Chave do 32 é nula."); + Console.WriteLine("UninstallString 32: nenhum."); + Console.WriteLine("QuietUninstallString 32: nenhum."); + }else{ + Console.WriteLine("Chave: "+reg.ToString()); + Console.WriteLine("UninstallString 32: "+reg.GetValue("UninstallString").ToString().Replace("\"", "")); + Console.WriteLine("QuietUninstallString 32: "+reg.GetValue("QuietUninstallString").ToString().Replace("\"", "")); + //desinstalação da versão x86 + Console.WriteLine("Desinstalando a versão descontinuada do VLibras x86. Por favor, aguarde."); + desinstalarVLibras(reg); + //Console.WriteLine("Desinstalou a versão descontinuada do VLibras x86."); + } + }catch(Exception e){ + Console.WriteLine("Erro x86: {0}",e); + } + } + + Console.WriteLine(""); + Console.WriteLine("Verificando se o Python 2.7.9 está instalado"); + + //VERIFICAÇÃO DO INTERPRETADOR PYTHON + //x64 + try{ + reg = lm64.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{79F081BF-7454-43DB-BD8F-9EE596813232}"); + reg2 = lm64.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{79F081BF-7454-43DB-BD8F-9EE596813233}"); + reg3 = lm32.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{79F081BF-7454-43DB-BD8F-9EE596813232}"); + reg4 = lm32.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{79F081BF-7454-43DB-BD8F-9EE596813233}"); + if(reg == null && reg2 == null && reg3 == null && reg4 == null){ + Console.WriteLine("O python 2.7.9 não se encontra instalado. Por confirme a instalação."); + if(Environment.Is64BitOperatingSystem){ + instalarPython(64); + }else{ + instalarPython(86); + } + } + }catch(Exception e){ + Console.WriteLine("Erro python: {0}",e); + } + + Console.WriteLine(""); + Console.WriteLine("Checando as variáveis de ambiente."); + + //CONFIGURAÇÃO DAS VARIÁVEIS DE AMBIENTE + try{ + ResetEnvVar(); + }catch(Exception e){ + Console.WriteLine("Erro Var Env: {0}", e); + } + + + Console.WriteLine(""); + //DOWNLOAD DOS SINAIS + //BAIXA OS ZIPS DOS SINAIS + string url = @"http://127.0.0.1:8080/"; + string path = @"..\"; + string extractPath = @"..\Bundles\"; + string ext = @".zip"; + int i = 1; + string remote; + string local; + //baixa apenas se for mais recente ou se usuário não possuir cópia + while(true){ + remote = url+i.ToString()+ext; + local = path+i.ToString()+ext; + if(!RemoteFileExists(remote)){ + //NECESSÁRIO PARA EVITAR IndexOutOfRange + i--; + break; + }else{ + if(!File.Exists(local)){ + DownloadFileToPath(remote, local); + }else{ + if(RemoteIsNewerThanLocal(remote, local)){ + DownloadFileToPath(remote, local); + //DELETA ARQUIVO DE VERIFICAÇÃO PARA QUE HAJA NOVA EXTRAÇÃO + File.Delete(extractPath + i); + } + } + } + i++; + } + + + //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 + bool exists = System.IO.Directory.Exists(extractPath); + if(!exists){ + System.IO.Directory.CreateDirectory(extractPath); + } + + while(i > 0){ + if(!File.Exists(extractPath+i.ToString())){ + string zip = path+i.ToString()+ext; + using (ZipArchive archive = ZipFile.Open(zip, ZipArchiveMode.Read, System.Text.Encoding.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.OEMCodePage))){ + foreach (ZipArchiveEntry entry in archive.Entries){ + //POSSO FILTRAR E EXTRAIR APENAS ARQUIVOS QUE TERMINEM COM O VALOR DA STRING + if (entry.FullName.EndsWith("", StringComparison.OrdinalIgnoreCase)) + { + entry.ExtractToFile(Path.Combine(extractPath, entry.FullName), 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 + File.Create(extractPath+i).Close(); + } + i--; + } + + //EXTRAI OS BUNDLES + /*//VERSÃO QUE EXTRAIA TODOS ZIPS NA PASTA SINAIS + try{ + //ARRAY COM PATHS DOS ZIPS: "C:\...\blabla.zip" + string[] zipPaths = Directory.GetFiles(Directory.GetCurrentDirectory()+@"\Sinais\", "*.zip", SearchOption.AllDirectories); + + //ARRAY COM NOMES DOS ZIPS: "blabla" + string[] nomeZips = new string[zipPaths.Length]; + for(int i = 0; i < zipPaths.Length; i++){ + int slashIdx = zipPaths[i].LastIndexOf(@"\"); + int extIdx = zipPaths[i].LastIndexOf(@"."); + //Console.WriteLine("path>> "+zipPath); + //Console.WriteLine("removido a extensão>> "+zipPath.Remove(extIdx, 4)); + //Console.WriteLine("nome do arquivo com extensão>> "+zipPath.Remove(0, slashIdx + 1)); + Console.WriteLine("nome do arquivo sem extensão>> "+zipPaths[i].Remove(extIdx, 4).Remove(0, slashIdx + 1)); + nomeZips[i] = zipPaths[i].Remove(extIdx, 4).Remove(0, slashIdx + 1); + //Console.WriteLine("nomeZips["+i+"]>> "+ nomeZips[i]); + } + + //EXTRAI UM ARQUIVO: "C:\...\pastaComZip\zipado.zip" + //EM: "C:\...\pastaComZip\zipado\arquivoQueEstavaEmZipado" + for(int i = 0; i < nomeZips.Length; i++){ + string extractPath = zipPaths[i]+@"\..\..\..\Bundles\"; //volta duas e cria lá + + //SE O CAMINHO DE EXTRAÇÃO NÃO EXISTE, ELE SERÁ CRIADO + bool exists = System.IO.Directory.Exists(extractPath); + if(!exists){ + System.IO.Directory.CreateDirectory(extractPath); + } + //EXTRAÇÃO DOS ARQUIVOS + using (ZipArchive archive = ZipFile.Open(zipPaths[i], ZipArchiveMode.Read, System.Text.Encoding.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.OEMCodePage))) + { + foreach (ZipArchiveEntry entry in archive.Entries) + { + //POSSO FILTRAR E EXTRAIR APENAS ARQUIVOS QUE TERMINEM COM O VALOR DA STRING + if (entry.FullName.EndsWith("", StringComparison.OrdinalIgnoreCase)) + { + entry.ExtractToFile(Path.Combine(extractPath, entry.FullName), true); + } + } + } + } + //DELETA O ZIP NO FINAL + for(int i = 0; i < zipPaths.Length; i++){ + if(File.Exists(zipPaths[i])){ + File.Delete(zipPaths[i]); + } + } + }catch(Exception e){ + Console.WriteLine("ERRO ZipFile: {0}", e); + } + */ + /*//VERSÃO QUE CHECAVA UM ARQUIVO DICTIONARY_VERSION.TXT + try{ + //string dictVer = System.IO.File.ReadAllText(@"dictionary_version.txt"); + string[] dictVer = Directory.GetFiles(Directory.GetCurrentDirectory(), "dictVer.txt", SearchOption.AllDirectories); + if(dictVer.Length == 0){ + Console.WriteLine("Path de DictVer.txt: null path"); + }else{ + Console.WriteLine("Path de DictVer.txt: " + dictVer[0]); + } + if(dictVer.Length == 0){ + string[] buscaBundles = Directory.GetFiles(Directory.GetCurrentDirectory(), "Bundles.zip", SearchOption.AllDirectories); + string zipPath = buscaBundles[0]; + string extractPath = buscaBundles[0] + @"\..\Bundles\"; + + using (ZipArchive archive = ZipFile.Open(zipPath, ZipArchiveMode.Read, System.Text.Encoding.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.OEMCodePage))) + { + foreach (ZipArchiveEntry entry in archive.Entries) + { + if (entry.FullName.EndsWith("", StringComparison.OrdinalIgnoreCase)) + { + entry.ExtractToFile(Path.Combine(extractPath, entry.FullName), true); + } + } + } + } + }catch(Exception e){ + Console.WriteLine("ERRO ZipFile: {0}", e); + } + */ + + Console.WriteLine("Pré-requisitos verificados."); + //Console.ReadKey(); + + + + //RODA O VLIBRAS + try{ + Process playerProc = new Process(); + string[] buscaPlayer = Directory.GetFiles(Directory.GetCurrentDirectory(), "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}", e); + } + + /* + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + */ + } + } +} -- libgit2 0.21.2