From 15994223e318613af3c97471c285b43467c5c143 Mon Sep 17 00:00:00 2001 From: CaioMoraes Date: Wed, 5 Oct 2016 00:49:21 -0300 Subject: [PATCH] Adição das classes BundlesManager e Requirements --- AU.csproj | 7 +++++-- BundlesManager.cs | 148 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Program.cs | 387 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Requirements.cs | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 348 insertions(+), 291 deletions(-) create mode 100644 BundlesManager.cs create mode 100644 Requirements.cs diff --git a/AU.csproj b/AU.csproj index 7207bd6..e87ee0c 100644 --- a/AU.csproj +++ b/AU.csproj @@ -26,9 +26,9 @@ http://150.165.205.137:8080/ VLIBRAS LAVID-UFPB - 1.0.0.67 + 1.0.0.82 false - 77 + 94 1.0.0.%2a true true @@ -86,6 +86,7 @@ + @@ -96,6 +97,7 @@ + Form @@ -104,6 +106,7 @@ + Form1.cs diff --git a/BundlesManager.cs b/BundlesManager.cs new file mode 100644 index 0000000..d2bc40b --- /dev/null +++ b/BundlesManager.cs @@ -0,0 +1,148 @@ +using System; +using System.Net; +using System.IO; +using System.IO.Compression; + +namespace VLIBRAS_II +{ + static class BundlesManager + { + + public static void ExtractToDirectory(this ZipArchive archive, string destinationDirectoryName, bool overwrite){ + if (!overwrite){ + archive.ExtractToDirectory(destinationDirectoryName); + 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); + } + + if (file.Name != ""){ + file.ExtractToFile(completeFileName, true); + } + } + } + + private static bool RemoteFileExists(string url){ + 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; + } + } + + //File.Exists(path); + + private 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; + } + } + + private static void DownloadFileToPath(string site, string path){ + try{ + WebClient webClient = new WebClient(); + webClient.DownloadFile(site, path); + }catch(Exception e){ + Console.WriteLine("Erro: {0}", e); + } + } + + public static int DownloadBundlesPackages(string url, string rootPath, string extractPath){ + //rootPath é o path dos arquivos .zip locais + //url é o path dos arquivos .zip remotos + //extractPath é o path da pasta Bundles + string ext = @".zip"; + int i = 1; + string remote; + string local; + while(true){ + remote = url+i.ToString()+ext; + local = rootPath+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++; + } + return i; + } + + public static void ExtractBundlesPackages(string rootPath, string extractPath, int qtd){ + string ext = @".zip"; + bool exists = System.IO.Directory.Exists(extractPath); + if(!exists){ + System.IO.Directory.CreateDirectory(extractPath); + } + + while(qtd > 0){ + if(!File.Exists(extractPath+qtd.ToString())){ + string zip = rootPath+qtd.ToString()+ext; + Console.WriteLine("Extraindo o arquivo: "+zip); + ZipFile.ExtractToDirectory(zip, extractPath); + //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--; + } + } + //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){ + string ext = @".zip"; + bool exists = System.IO.Directory.Exists(extractPath); + if(!exists){ + System.IO.Directory.CreateDirectory(extractPath); + } + + 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(); + } + qtd--; + } + } + } +} diff --git a/Program.cs b/Program.cs index ca0886a..9b00838 100644 --- a/Program.cs +++ b/Program.cs @@ -1,61 +1,14 @@ 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 Microsoft.Win32; using System.IO; using System.IO.Compression; -namespace AU +namespace VLIBRAS_II { 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(); @@ -69,139 +22,113 @@ namespace AU 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(); - } - } - - 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); + //resetProc.WaitForExit(); } - 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 + //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 dirAtual = Directory.GetCurrentDirectory(); + string[] buscaDeArquivo; + //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); - 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); + + //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(""); - //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); - } + //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(""); - Console.WriteLine("Verificando se o Python 2.7.9 está instalado"); - //VERIFICAÇÃO DO INTERPRETADOR PYTHON + + //VERIFICAÇÃO E DESINSTALAÇÃO DO VLIBRAS DESCONTINUADO + Console.WriteLine("Verificação se há versões descontinuadas do VLibras."); //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); + 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); + + + //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}"); + //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); + } + + + //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); } - Console.WriteLine(""); - Console.WriteLine("Checando as variáveis de ambiente."); //CONFIGURAÇÃO DAS VARIÁVEIS DE AMBIENTE + Console.WriteLine("Checando as variáveis de ambiente."); try{ ResetEnvVar(); }catch(Exception e){ @@ -209,157 +136,38 @@ namespace AU } - Console.WriteLine(""); //DOWNLOAD DOS SINAIS - //BAIXA OS ZIPS DOS SINAIS - string url = @"http://127.0.0.1:8080/"; - string path = @"..\"; + //BAIXA OS ZIPS DOS SINAIS (1.ZIP, 2.ZIP E ETC...) + string rootPath = @"..\"; 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++; + int qtdDeBundles = 0; + Console.WriteLine("Baixando pacote de sinais."); + try{ + qtdDeBundles = BundlesManager.DownloadBundlesPackages(url, rootPath, extractPath); + }catch(Exception e){ + Console.WriteLine("Erro no download do pacote de sinais."); } //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 + Console.WriteLine("Extraindo pacote de 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]); - } - } + BundlesManager.ExtractBundlesPackagesOverWrite(rootPath, extractPath, qtdDeBundles); }catch(Exception e){ - Console.WriteLine("ERRO ZipFile: {0}", e); + Console.WriteLine("Erro na extração"); } - */ - /*//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); - } - */ + //CONCLUSÃO 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[] buscaPlayer = Directory.GetFiles(dirAtual, "vlibrasPlayer.exe", SearchOption.AllDirectories); string player = buscaPlayer[0]; playerProc.StartInfo.FileName = player; playerProc.EnableRaisingEvents = true; @@ -374,6 +182,7 @@ namespace AU Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); */ + } } } diff --git a/Requirements.cs b/Requirements.cs new file mode 100644 index 0000000..f8df13e --- /dev/null +++ b/Requirements.cs @@ -0,0 +1,97 @@ +using System; +using Microsoft.Win32; + +namespace VLIBRAS_II +{ + class Requirements + { + public static bool IsInstalled(RegistryKey[] regs){ + foreach(RegistryKey reg in regs){ + if(reg != null){ + return true; + } + } + return false; + } + + public static bool IsInstalled(RegistryKey reg){ + if(reg != null){ + return true; + }else{ + return false; + } + } + + public static void Uninstall(RegistryKey[] regs){ + 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; + uninsProcInfo.FileName = "cmd.exe"; + string comandoUnins; + comandoUnins = "/C" + reg.GetValue("QuietUninstallString").ToString().Replace("\"", ""); + uninsProcInfo.Arguments = comandoUnins; + uninsProc.StartInfo = uninsProcInfo; + uninsProc.Start(); + //uninsProc.WaitForExit(); + }catch(Exception e){ + //NOTHING + } + } + } + } + + public static void Install(string pathInstaller64, string pathInstaller86){ + string pathInstaller; + if(Environment.Is64BitOperatingSystem){ + pathInstaller = pathInstaller64; + }else{ + pathInstaller = pathInstaller86; + } + if(pathInstaller == ""){ + return; + } + string comandoIns = "/C" + pathInstaller; + //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(); + + 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; + //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(); + + insProcInfo.FileName = "cmd.exe"; + insProcInfo.Arguments = comandoIns; + //insProcInfo.Verb = "runas"; //ADM + + insProc.StartInfo = insProcInfo; + insProc.Start(); + insProc.WaitForExit(); + } + + } +} -- libgit2 0.21.2