Commit 15994223e318613af3c97471c285b43467c5c143
1 parent
40849d9f
Exists in
Au-ghub/master
Adição das classes BundlesManager e Requirements
Refatoração do código em mais duas classes e adição da extração com sobreescrita. BundlesManager para download e extração dos pacotes de sinais e Requirements para verificação e instalação dos requisitos do VLibras.
Showing
4 changed files
with
348 additions
and
291 deletions
Show diff stats
AU.csproj
... | ... | @@ -26,9 +26,9 @@ |
26 | 26 | <UpdateUrl>http://150.165.205.137:8080/</UpdateUrl> |
27 | 27 | <ProductName>VLIBRAS</ProductName> |
28 | 28 | <PublisherName>LAVID-UFPB</PublisherName> |
29 | - <MinimumRequiredVersion>1.0.0.67</MinimumRequiredVersion> | |
29 | + <MinimumRequiredVersion>1.0.0.82</MinimumRequiredVersion> | |
30 | 30 | <OpenBrowserOnPublish>false</OpenBrowserOnPublish> |
31 | - <ApplicationRevision>77</ApplicationRevision> | |
31 | + <ApplicationRevision>94</ApplicationRevision> | |
32 | 32 | <ApplicationVersion>1.0.0.%2a</ApplicationVersion> |
33 | 33 | <UseApplicationTrust>true</UseApplicationTrust> |
34 | 34 | <CreateDesktopShortcut>true</CreateDesktopShortcut> |
... | ... | @@ -86,6 +86,7 @@ |
86 | 86 | <Reference Include="System.Core" /> |
87 | 87 | <Reference Include="System.IO.Compression" /> |
88 | 88 | <Reference Include="System.IO.Compression.FileSystem" /> |
89 | + <Reference Include="System.Net" /> | |
89 | 90 | <Reference Include="System.Xml.Linq" /> |
90 | 91 | <Reference Include="System.Data.DataSetExtensions" /> |
91 | 92 | <Reference Include="Microsoft.CSharp" /> |
... | ... | @@ -96,6 +97,7 @@ |
96 | 97 | <Reference Include="System.Xml" /> |
97 | 98 | </ItemGroup> |
98 | 99 | <ItemGroup> |
100 | + <Compile Include="BundlesManager.cs" /> | |
99 | 101 | <Compile Include="Form1.cs"> |
100 | 102 | <SubType>Form</SubType> |
101 | 103 | </Compile> |
... | ... | @@ -104,6 +106,7 @@ |
104 | 106 | </Compile> |
105 | 107 | <Compile Include="Program.cs" /> |
106 | 108 | <Compile Include="Properties\AssemblyInfo.cs" /> |
109 | + <Compile Include="Requirements.cs" /> | |
107 | 110 | <EmbeddedResource Include="Form1.resx"> |
108 | 111 | <DependentUpon>Form1.cs</DependentUpon> |
109 | 112 | </EmbeddedResource> | ... | ... |
... | ... | @@ -0,0 +1,148 @@ |
1 | +using System; | |
2 | +using System.Net; | |
3 | +using System.IO; | |
4 | +using System.IO.Compression; | |
5 | + | |
6 | +namespace VLIBRAS_II | |
7 | +{ | |
8 | + static class BundlesManager | |
9 | + { | |
10 | + | |
11 | + public static void ExtractToDirectory(this ZipArchive archive, string destinationDirectoryName, bool overwrite){ | |
12 | + if (!overwrite){ | |
13 | + archive.ExtractToDirectory(destinationDirectoryName); | |
14 | + return; | |
15 | + } | |
16 | + foreach (ZipArchiveEntry file in archive.Entries){ | |
17 | + string completeFileName = Path.Combine(destinationDirectoryName, file.FullName); | |
18 | + string directory = Path.GetDirectoryName(completeFileName); | |
19 | + Console.WriteLine("Extraindo "+file.FullName+"."); | |
20 | + if (!Directory.Exists(directory)){ | |
21 | + Directory.CreateDirectory(directory); | |
22 | + } | |
23 | + | |
24 | + if (file.Name != ""){ | |
25 | + file.ExtractToFile(completeFileName, true); | |
26 | + } | |
27 | + } | |
28 | + } | |
29 | + | |
30 | + private static bool RemoteFileExists(string url){ | |
31 | + try{ | |
32 | + //Creating the HttpWebRequest | |
33 | + HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; | |
34 | + //Setting the Request method HEAD | |
35 | + request.Method = "HEAD"; | |
36 | + request.Timeout = 2000; | |
37 | + //Getting the Web Response. | |
38 | + HttpWebResponse response = request.GetResponse() as HttpWebResponse; | |
39 | + //Returns TURE if the Status code == 200 | |
40 | + return (response.StatusCode == HttpStatusCode.OK); | |
41 | + } | |
42 | + catch{ | |
43 | + //Any exception will returns false. | |
44 | + return false; | |
45 | + } | |
46 | + } | |
47 | + | |
48 | + //File.Exists(path); | |
49 | + | |
50 | + private static bool RemoteIsNewerThanLocal(string url, string path){ | |
51 | + FileInfo sourceFile = new FileInfo(path); | |
52 | + var request = (HttpWebRequest)WebRequest.Create(url); | |
53 | + request.Method = "HEAD"; | |
54 | + var response = (HttpWebResponse)request.GetResponse(); | |
55 | + //Console.WriteLine("response.LastModified: "+response.LastModified); | |
56 | + //Console.WriteLine("sourceFile.LastWriteTime: "+sourceFile.LastWriteTime); | |
57 | + if(response.LastModified > sourceFile.LastWriteTime){ | |
58 | + return true; | |
59 | + }else{ | |
60 | + return false; | |
61 | + } | |
62 | + } | |
63 | + | |
64 | + private static void DownloadFileToPath(string site, string path){ | |
65 | + try{ | |
66 | + WebClient webClient = new WebClient(); | |
67 | + webClient.DownloadFile(site, path); | |
68 | + }catch(Exception e){ | |
69 | + Console.WriteLine("Erro: {0}", e); | |
70 | + } | |
71 | + } | |
72 | + | |
73 | + public static int DownloadBundlesPackages(string url, string rootPath, string extractPath){ | |
74 | + //rootPath é o path dos arquivos .zip locais | |
75 | + //url é o path dos arquivos .zip remotos | |
76 | + //extractPath é o path da pasta Bundles | |
77 | + string ext = @".zip"; | |
78 | + int i = 1; | |
79 | + string remote; | |
80 | + string local; | |
81 | + while(true){ | |
82 | + remote = url+i.ToString()+ext; | |
83 | + local = rootPath+i.ToString()+ext; | |
84 | + if(!RemoteFileExists(remote)){ | |
85 | + //NECESSÁRIO PARA EVITAR IndexOutOfRange | |
86 | + i--; | |
87 | + break; | |
88 | + }else{ | |
89 | + if(!File.Exists(local)){ | |
90 | + DownloadFileToPath(remote, local); | |
91 | + }else{ | |
92 | + if(RemoteIsNewerThanLocal(remote, local)){ | |
93 | + DownloadFileToPath(remote, local); | |
94 | + //DELETA ARQUIVO DE VERIFICAÇÃO PARA QUE HAJA NOVA EXTRAÇÃO | |
95 | + File.Delete(extractPath + i); | |
96 | + } | |
97 | + } | |
98 | + } | |
99 | + i++; | |
100 | + } | |
101 | + return i; | |
102 | + } | |
103 | + | |
104 | + public static void ExtractBundlesPackages(string rootPath, string extractPath, int qtd){ | |
105 | + string ext = @".zip"; | |
106 | + bool exists = System.IO.Directory.Exists(extractPath); | |
107 | + if(!exists){ | |
108 | + System.IO.Directory.CreateDirectory(extractPath); | |
109 | + } | |
110 | + | |
111 | + while(qtd > 0){ | |
112 | + if(!File.Exists(extractPath+qtd.ToString())){ | |
113 | + string zip = rootPath+qtd.ToString()+ext; | |
114 | + Console.WriteLine("Extraindo o arquivo: "+zip); | |
115 | + ZipFile.ExtractToDirectory(zip, extractPath); | |
116 | + //CRIA UM ARQUIVO 1(SEM EXTENSÃO), 2, 3... NA PASTA BUNDLES PARA VERIFICAÇÃO DE EXTRAÇÃO PRÉVIA | |
117 | + //SÓ É CRIADO APÓS EXTRAÇÃO DE TODOS OS ARQUIVOS DE CADA ZIP | |
118 | + Console.WriteLine("Extração do arquivo "+zip+" concluída."); | |
119 | + File.Create(extractPath+qtd).Close(); | |
120 | + } | |
121 | + qtd--; | |
122 | + } | |
123 | + } | |
124 | + //ZipArchive archive = ZipFile.Open(fileAbsolute, ZipArchiveMode.Read, System.Text.Encoding.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.OEMCodePage)); | |
125 | + public static void ExtractBundlesPackagesOverWrite(string rootPath, string extractPath, int qtd){ | |
126 | + string ext = @".zip"; | |
127 | + bool exists = System.IO.Directory.Exists(extractPath); | |
128 | + if(!exists){ | |
129 | + System.IO.Directory.CreateDirectory(extractPath); | |
130 | + } | |
131 | + | |
132 | + while(qtd > 0){ | |
133 | + if(!File.Exists(extractPath+qtd.ToString())){ | |
134 | + string fileAbsolute = rootPath+qtd.ToString()+ext; | |
135 | + ZipArchive zip = ZipFile.Open(fileAbsolute, ZipArchiveMode.Read, System.Text.Encoding.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.OEMCodePage)); | |
136 | + Console.WriteLine("Extraindo o arquivo: "+zip); | |
137 | + //ZipFile.ExtractToDirectory(zip, extractPath); | |
138 | + ExtractToDirectory(zip, extractPath, true); | |
139 | + //CRIA UM ARQUIVO 1(SEM EXTENSÃO), 2, 3... NA PASTA BUNDLES PARA VERIFICAÇÃO DE EXTRAÇÃO PRÉVIA | |
140 | + //SÓ É CRIADO APÓS EXTRAÇÃO DE TODOS OS ARQUIVOS DE CADA ZIP | |
141 | + Console.WriteLine("Extração do arquivo "+zip+" concluída."); | |
142 | + File.Create(extractPath+qtd).Close(); | |
143 | + } | |
144 | + qtd--; | |
145 | + } | |
146 | + } | |
147 | + } | |
148 | +} | ... | ... |
Program.cs
1 | 1 | using System; |
2 | -using System.Collections.Generic; | |
3 | -using System.Linq; | |
4 | -using System.Threading.Tasks; | |
5 | -using System.Windows.Forms; | |
6 | 2 | using System.Diagnostics; |
7 | -using System.Security.Permissions; | |
8 | -using Microsoft.Win32; | |
9 | 3 | using System.Net; |
10 | -using System.Collections; | |
4 | +using Microsoft.Win32; | |
11 | 5 | using System.IO; |
12 | 6 | using System.IO.Compression; |
13 | 7 | |
14 | -namespace AU | |
8 | +namespace VLIBRAS_II | |
15 | 9 | { |
16 | 10 | static class Program |
17 | 11 | { |
18 | - public static bool RemoteFileExists(string url){ | |
19 | - try{ | |
20 | - //Creating the HttpWebRequest | |
21 | - HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; | |
22 | - //Setting the Request method HEAD | |
23 | - request.Method = "HEAD"; | |
24 | - //Getting the Web Response. | |
25 | - HttpWebResponse response = request.GetResponse() as HttpWebResponse; | |
26 | - //Returns TURE if the Status code == 200 | |
27 | - return (response.StatusCode == HttpStatusCode.OK); | |
28 | - } | |
29 | - catch{ | |
30 | - //Any exception will returns false. | |
31 | - return false; | |
32 | - } | |
33 | - } | |
34 | - | |
35 | - //File.Exists(path); | |
36 | - | |
37 | - public static bool RemoteIsNewerThanLocal(string url, string path){ | |
38 | - FileInfo sourceFile = new FileInfo(path); | |
39 | - var request = (HttpWebRequest)WebRequest.Create(url); | |
40 | - request.Method = "HEAD"; | |
41 | - var response = (HttpWebResponse)request.GetResponse(); | |
42 | - //Console.WriteLine("response.LastModified: "+response.LastModified); | |
43 | - //Console.WriteLine("sourceFile.LastWriteTime: "+sourceFile.LastWriteTime); | |
44 | - if(response.LastModified > sourceFile.LastWriteTime){ | |
45 | - return true; | |
46 | - }else{ | |
47 | - return false; | |
48 | - } | |
49 | - } | |
50 | - | |
51 | - public static void DownloadFileToPath(string site, string path){ | |
52 | - try{ | |
53 | - WebClient webClient = new WebClient(); | |
54 | - webClient.DownloadFile(site, path); | |
55 | - }catch(Exception e){ | |
56 | - Console.WriteLine("Erro: {0}", e); | |
57 | - } | |
58 | - } | |
59 | 12 | static void ResetEnvVar(){ |
60 | 13 | string vLibrasAtual = Environment.GetEnvironmentVariable("PATH_VLIBRAS",EnvironmentVariableTarget.Machine); |
61 | 14 | string vLibrasNovo = Directory.GetCurrentDirectory(); |
... | ... | @@ -69,139 +22,113 @@ namespace AU |
69 | 22 | System.Diagnostics.ProcessStartInfo resetProcInfo = new System.Diagnostics.ProcessStartInfo(); |
70 | 23 | resetProcInfo.FileName = resetPath; |
71 | 24 | resetProcInfo.Verb = "runas"; //ADM |
25 | + resetProcInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; | |
72 | 26 | //resetProcInfo.Arguments = comandoUnins; |
73 | 27 | |
74 | 28 | System.Diagnostics.Process resetProc = new System.Diagnostics.Process(); |
75 | 29 | resetProc.StartInfo = resetProcInfo; |
76 | 30 | resetProc.Start(); |
77 | - resetProc.WaitForExit(); | |
78 | - } | |
79 | - } | |
80 | - | |
81 | - static void desinstalarVLibras(RegistryKey reg){ | |
82 | - //Variáveis para desinstalação | |
83 | - System.Diagnostics.Process uninsProc = new System.Diagnostics.Process(); | |
84 | - System.Diagnostics.ProcessStartInfo uninsProcInfo = new System.Diagnostics.ProcessStartInfo(); | |
85 | - //uninsProcInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; | |
86 | - uninsProcInfo.FileName = "cmd.exe"; | |
87 | - string comandoUnins; | |
88 | - comandoUnins = "/C" + reg.GetValue("QuietUninstallString").ToString().Replace("\"", ""); | |
89 | - uninsProcInfo.Arguments = comandoUnins; | |
90 | - uninsProc.StartInfo = uninsProcInfo; | |
91 | - uninsProc.Start(); | |
92 | - uninsProc.WaitForExit(); | |
93 | - } | |
94 | - | |
95 | - static void instalarPython(int opSys){ | |
96 | - //Console.WriteLine("Por favor, confirme a instalação do Python 2.7.9"); | |
97 | - string[] buscaPython; | |
98 | - if(opSys == 64){ | |
99 | - buscaPython = Directory.GetFiles(Directory.GetCurrentDirectory(), "python-2.7.9.amd64.msi", SearchOption.AllDirectories); | |
100 | - }else{ | |
101 | - buscaPython = Directory.GetFiles(Directory.GetCurrentDirectory(), "python-2.7.9.msi", SearchOption.AllDirectories); | |
31 | + //resetProc.WaitForExit(); | |
102 | 32 | } |
103 | - string pythonPath = buscaPython[0]; | |
104 | - string comandoIns = "/C" + pythonPath; | |
105 | - | |
106 | - System.Diagnostics.ProcessStartInfo insProcInfo = new System.Diagnostics.ProcessStartInfo(); | |
107 | - System.Diagnostics.Process insProc = new System.Diagnostics.Process(); | |
108 | - | |
109 | - insProcInfo.FileName = "cmd.exe"; | |
110 | - insProcInfo.Arguments = comandoIns; | |
111 | - //insProcInfo.Verb = "runas"; //ADM | |
112 | - | |
113 | - insProc.StartInfo = insProcInfo; | |
114 | - insProc.Start(); | |
115 | - insProc.WaitForExit(); | |
116 | - | |
117 | 33 | } |
118 | 34 | |
119 | 35 | [STAThread] |
120 | 36 | static void Main() |
121 | 37 | { |
122 | - | |
123 | - //VERFICAÇÃO E DESINSTALAÇÃO DO VLIBRAS DESCONTINUADO | |
124 | - //Variáveis para verificar se há instalação no registro | |
38 | + //ENDEREÇO DE ONDE SERÃO BAIXADOS OS PACOTES (.ZIP) DE SINAIS (1.ZIP, 2.ZIP E ETC...) | |
39 | + string url = @"http://150.165.205.137:8080/"; | |
40 | + string dirAtual = Directory.GetCurrentDirectory(); | |
41 | + string[] buscaDeArquivo; | |
42 | + //Variáveis para verificar se há instalação no registro em lm64 e 32 (local machine x64 e x86) | |
125 | 43 | var lm64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); |
126 | 44 | var lm32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32); |
127 | - RegistryKey reg; | |
128 | - RegistryKey reg2; | |
129 | - RegistryKey reg3; | |
130 | - RegistryKey reg4; | |
131 | 45 | |
132 | - bool tentouX64 = false; | |
133 | - Console.WriteLine("Verificação se há versões descontinuadas do VLibras."); | |
134 | - //x64 | |
135 | - try{ | |
136 | - reg = lm64.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{84B73167-EF7F-42BB-9CCD-E1A8E2C53659-vlibras}_is1"); | |
137 | - if(reg == null){ | |
138 | - Console.WriteLine("Chave do 64 é nula."); | |
139 | - Console.WriteLine("UninstallString 64: nenhum."); | |
140 | - Console.WriteLine("QuietUninstallString 64: nenhum."); | |
141 | - }else{ | |
142 | - tentouX64 = true; | |
143 | - Console.WriteLine("Chave: "+reg.ToString()); | |
144 | - Console.WriteLine("UninstallString 64: "+reg.GetValue("UninstallString").ToString().Replace("\"", "")); | |
145 | - Console.WriteLine("QuietUninstallString 64: "+reg.GetValue("QuietUninstallString").ToString().Replace("\"", "")); | |
146 | - //desinstalação da versão x64 | |
147 | - Console.WriteLine("Desinstalando a versão descontinuada do VLibras x64. Por favor, aguarde."); | |
148 | - desinstalarVLibras(reg); | |
149 | - //Console.WriteLine("Desinstalou a versão descontinuada do VLibras x64."); | |
150 | - } | |
151 | - }catch(Exception e){ | |
152 | - Console.WriteLine("Erro x64: {0}",e); | |
46 | + | |
47 | + //EXTRAÇÃO DO VLIBRAS | |
48 | + string vlibrasZip = @"VLIBRAS.zip"; | |
49 | + string vlibrasZipAbsolute = dirAtual+@"\"+vlibrasZip; | |
50 | + ZipArchive archive = ZipFile.Open(vlibrasZipAbsolute, ZipArchiveMode.Read, System.Text.Encoding.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.OEMCodePage)); | |
51 | + if(!File.Exists(dirAtual+@"\"+@"extraido")){ | |
52 | + Console.WriteLine("Extraindo do arquivo: "+vlibrasZip); | |
53 | + BundlesManager.ExtractToDirectory(archive, dirAtual, true); | |
54 | + Console.WriteLine("Extração do arquivo "+vlibrasZip+" concluída."); | |
55 | + File.Create(dirAtual+@"\"+@"extraido").Close(); | |
153 | 56 | } |
154 | 57 | |
155 | - Console.WriteLine(""); | |
156 | 58 | |
157 | - //x86 | |
158 | - if(!tentouX64){ | |
159 | - try{ | |
160 | - reg = lm32.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{84B73167-EF7F-42BB-9CCD-E1A8E2C53659-vlibras}_is1"); | |
161 | - if(reg == null){ | |
162 | - Console.WriteLine("Chave do 32 é nula."); | |
163 | - Console.WriteLine("UninstallString 32: nenhum."); | |
164 | - Console.WriteLine("QuietUninstallString 32: nenhum."); | |
165 | - }else{ | |
166 | - Console.WriteLine("Chave: "+reg.ToString()); | |
167 | - Console.WriteLine("UninstallString 32: "+reg.GetValue("UninstallString").ToString().Replace("\"", "")); | |
168 | - Console.WriteLine("QuietUninstallString 32: "+reg.GetValue("QuietUninstallString").ToString().Replace("\"", "")); | |
169 | - //desinstalação da versão x86 | |
170 | - Console.WriteLine("Desinstalando a versão descontinuada do VLibras x86. Por favor, aguarde."); | |
171 | - desinstalarVLibras(reg); | |
172 | - //Console.WriteLine("Desinstalou a versão descontinuada do VLibras x86."); | |
173 | - } | |
174 | - }catch(Exception e){ | |
175 | - Console.WriteLine("Erro x86: {0}",e); | |
176 | - } | |
59 | + //EXTRAÇÃO DOS REQUISITOS | |
60 | + string reqZip = @"requisitos.zip"; | |
61 | + string reqZipAbsolute = dirAtual+@"\"+reqZip; | |
62 | + archive = ZipFile.Open(reqZipAbsolute, ZipArchiveMode.Read, System.Text.Encoding.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.OEMCodePage)); | |
63 | + if(!File.Exists(dirAtual+@"\"+@"extraidoReq")){ | |
64 | + Console.WriteLine("Extraindo do arquivo: "+reqZip); | |
65 | + BundlesManager.ExtractToDirectory(archive, dirAtual, true); | |
66 | + Console.WriteLine("Extração do arquivo "+reqZip+" concluída."); | |
67 | + File.Create(dirAtual+@"\"+@"extraidoReq").Close(); | |
177 | 68 | } |
178 | 69 | |
179 | - Console.WriteLine(""); | |
180 | - Console.WriteLine("Verificando se o Python 2.7.9 está instalado"); | |
181 | 70 | |
182 | - //VERIFICAÇÃO DO INTERPRETADOR PYTHON | |
71 | + | |
72 | + //VERIFICAÇÃO E DESINSTALAÇÃO DO VLIBRAS DESCONTINUADO | |
73 | + Console.WriteLine("Verificação se há versões descontinuadas do VLibras."); | |
183 | 74 | //x64 |
184 | - try{ | |
185 | - reg = lm64.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{79F081BF-7454-43DB-BD8F-9EE596813232}"); | |
186 | - reg2 = lm64.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{79F081BF-7454-43DB-BD8F-9EE596813233}"); | |
187 | - reg3 = lm32.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{79F081BF-7454-43DB-BD8F-9EE596813232}"); | |
188 | - reg4 = lm32.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{79F081BF-7454-43DB-BD8F-9EE596813233}"); | |
189 | - if(reg == null && reg2 == null && reg3 == null && reg4 == null){ | |
190 | - Console.WriteLine("O python 2.7.9 não se encontra instalado. Por confirme a instalação."); | |
191 | - if(Environment.Is64BitOperatingSystem){ | |
192 | - instalarPython(64); | |
193 | - }else{ | |
194 | - instalarPython(86); | |
195 | - } | |
196 | - } | |
197 | - }catch(Exception e){ | |
198 | - Console.WriteLine("Erro python: {0}",e); | |
75 | + RegistryKey[] regVLibrasOld = new RegistryKey[2]; | |
76 | + regVLibrasOld[0] = lm64.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{84B73167-EF7F-42BB-9CCD-E1A8E2C53659-vlibras}_is1"); | |
77 | + regVLibrasOld[1] = lm32.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{84B73167-EF7F-42BB-9CCD-E1A8E2C53659-vlibras}_is1"); | |
78 | + Requirements.Uninstall(regVLibrasOld); | |
79 | + | |
80 | + | |
81 | + //REGISTROS DO PYTHON | |
82 | + RegistryKey[] regPython = new RegistryKey[4]; | |
83 | + regPython[0] = lm64.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{79F081BF-7454-43DB-BD8F-9EE596813232}"); | |
84 | + regPython[1] = lm64.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{79F081BF-7454-43DB-BD8F-9EE596813233}"); | |
85 | + regPython[2] = lm32.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{79F081BF-7454-43DB-BD8F-9EE596813232}"); | |
86 | + regPython[3] = lm32.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{79F081BF-7454-43DB-BD8F-9EE596813233}"); | |
87 | + //VERIFICAÇÃO E INSTALAÇÃO DO PYTHON | |
88 | + Console.WriteLine("Verificando se o Python 2.7.9 está instalado"); | |
89 | + if(!Requirements.IsInstalled(regPython)){ | |
90 | + //PATHS DE INSTALAÇÃO DO PYTHON | |
91 | + buscaDeArquivo = Directory.GetFiles(dirAtual, "python-2.7.9.amd64.msi", SearchOption.AllDirectories); | |
92 | + string pythonPath64 = (buscaDeArquivo.Length > 0)? buscaDeArquivo[0]: @""; | |
93 | + buscaDeArquivo = Directory.GetFiles(dirAtual, "python-2.7.9.msi", SearchOption.AllDirectories); | |
94 | + string pythonPath86 = (buscaDeArquivo.Length > 0)? buscaDeArquivo[0]: @""; //O VALOR É 0 MESMO, POIS REALIZOU UMA NOVA BUSCA | |
95 | + Requirements.InstallAndWait(pythonPath64, pythonPath86); | |
96 | + } | |
97 | + | |
98 | + | |
99 | + //VERIFICAÇÃO E INSTALAÇÃO DE PYWIN32 | |
100 | + //usa esse arquivo para verificação de instalação do pywin32 | |
101 | + Console.WriteLine("Verificando instalação do Pywin32."); | |
102 | + RegistryKey[] regPywin32 = new RegistryKey[2]; | |
103 | + regPywin32[0] = lm64.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\pywin32-py2.7"); | |
104 | + regPywin32[1] = lm32.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\pywin32-py2.7"); | |
105 | + //string pywin32File = @"..\Bundles\pywin32"; | |
106 | + if(Requirements.IsInstalled(regPython) && !Requirements.IsInstalled(regPywin32)){//File.Exists(pywin32File)){ | |
107 | + buscaDeArquivo = Directory.GetFiles(dirAtual, "pywin32-220.win-amd64-py2.7.exe", SearchOption.AllDirectories); | |
108 | + string pywin32Pathx64 = (buscaDeArquivo.Length > 0)? buscaDeArquivo[0] : @""; | |
109 | + buscaDeArquivo = Directory.GetFiles(dirAtual, "pywin32-220.win32-py2.7.exe", SearchOption.AllDirectories); | |
110 | + string pywin32Pathx86 = (buscaDeArquivo.Length > 0)? buscaDeArquivo[0] : @""; | |
111 | + Requirements.Install(pywin32Pathx64, pywin32Pathx86); | |
112 | + //File.Create(pywin32File).Close(); | |
113 | + } | |
114 | + | |
115 | + | |
116 | + //VERIFICAÇÃO DA INSTALAÇÃO DO NVDA | |
117 | + Console.WriteLine("Verificando instalação do NVDA."); | |
118 | + //REGISTROS DO NDVA | |
119 | + RegistryKey[] regNVDA = new RegistryKey[3]; | |
120 | + regNVDA[0] = lm64.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NVDA"); | |
121 | + regNVDA[1] = lm32.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\NVDA"); | |
122 | + //PATH DO INSTALADOR DO NVDA | |
123 | + if(!Requirements.IsInstalled(regNVDA)){ | |
124 | + buscaDeArquivo = Directory.GetFiles(dirAtual, "nvda_snapshot_source-master-4d792f0.exe", SearchOption.AllDirectories); | |
125 | + string NVDApath = (buscaDeArquivo.Length > 0)? buscaDeArquivo[0] : @""; | |
126 | + Requirements.Install(NVDApath, NVDApath); | |
199 | 127 | } |
200 | 128 | |
201 | - Console.WriteLine(""); | |
202 | - Console.WriteLine("Checando as variáveis de ambiente."); | |
203 | 129 | |
204 | 130 | //CONFIGURAÇÃO DAS VARIÁVEIS DE AMBIENTE |
131 | + Console.WriteLine("Checando as variáveis de ambiente."); | |
205 | 132 | try{ |
206 | 133 | ResetEnvVar(); |
207 | 134 | }catch(Exception e){ |
... | ... | @@ -209,157 +136,38 @@ namespace AU |
209 | 136 | } |
210 | 137 | |
211 | 138 | |
212 | - Console.WriteLine(""); | |
213 | 139 | //DOWNLOAD DOS SINAIS |
214 | - //BAIXA OS ZIPS DOS SINAIS | |
215 | - string url = @"http://127.0.0.1:8080/"; | |
216 | - string path = @"..\"; | |
140 | + //BAIXA OS ZIPS DOS SINAIS (1.ZIP, 2.ZIP E ETC...) | |
141 | + string rootPath = @"..\"; | |
217 | 142 | string extractPath = @"..\Bundles\"; |
218 | - string ext = @".zip"; | |
219 | - int i = 1; | |
220 | - string remote; | |
221 | - string local; | |
222 | - //baixa apenas se for mais recente ou se usuário não possuir cópia | |
223 | - while(true){ | |
224 | - remote = url+i.ToString()+ext; | |
225 | - local = path+i.ToString()+ext; | |
226 | - if(!RemoteFileExists(remote)){ | |
227 | - //NECESSÁRIO PARA EVITAR IndexOutOfRange | |
228 | - i--; | |
229 | - break; | |
230 | - }else{ | |
231 | - if(!File.Exists(local)){ | |
232 | - DownloadFileToPath(remote, local); | |
233 | - }else{ | |
234 | - if(RemoteIsNewerThanLocal(remote, local)){ | |
235 | - DownloadFileToPath(remote, local); | |
236 | - //DELETA ARQUIVO DE VERIFICAÇÃO PARA QUE HAJA NOVA EXTRAÇÃO | |
237 | - File.Delete(extractPath + i); | |
238 | - } | |
239 | - } | |
240 | - } | |
241 | - i++; | |
143 | + int qtdDeBundles = 0; | |
144 | + Console.WriteLine("Baixando pacote de sinais."); | |
145 | + try{ | |
146 | + qtdDeBundles = BundlesManager.DownloadBundlesPackages(url, rootPath, extractPath); | |
147 | + }catch(Exception e){ | |
148 | + Console.WriteLine("Erro no download do pacote de sinais."); | |
242 | 149 | } |
243 | 150 | |
244 | 151 | |
245 | 152 | //EXTRAÇÃO: |
246 | 153 | //EXTRAI APENAS SE NÃO TIVER O ARQUIVO HOMÔNIMO SEM EXTENSÃO NA PASTA SINAIS |
247 | 154 | //SE O CAMINHO DE EXTRAÇÃO NÃO EXISTE, ELE SERÁ CRIADO |
248 | - bool exists = System.IO.Directory.Exists(extractPath); | |
249 | - if(!exists){ | |
250 | - System.IO.Directory.CreateDirectory(extractPath); | |
251 | - } | |
252 | - | |
253 | - while(i > 0){ | |
254 | - if(!File.Exists(extractPath+i.ToString())){ | |
255 | - string zip = path+i.ToString()+ext; | |
256 | - using (ZipArchive archive = ZipFile.Open(zip, ZipArchiveMode.Read, System.Text.Encoding.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.OEMCodePage))){ | |
257 | - foreach (ZipArchiveEntry entry in archive.Entries){ | |
258 | - //POSSO FILTRAR E EXTRAIR APENAS ARQUIVOS QUE TERMINEM COM O VALOR DA STRING | |
259 | - if (entry.FullName.EndsWith("", StringComparison.OrdinalIgnoreCase)) | |
260 | - { | |
261 | - entry.ExtractToFile(Path.Combine(extractPath, entry.FullName), true); | |
262 | - } | |
263 | - } | |
264 | - } | |
265 | - //CRIA UM ARQUIVO 1(SEM EXTENSÃO), 2, 3... NA PASTA BUNDLES PARA VERIFICAÇÃO DE EXTRAÇÃO PRÉVIA | |
266 | - //SÓ É CRIADO APÓS EXTRAÇÃO DE TODOS OS ARQUIVOS DE CADA ZIP | |
267 | - File.Create(extractPath+i).Close(); | |
268 | - } | |
269 | - i--; | |
270 | - } | |
271 | - | |
272 | - //EXTRAI OS BUNDLES | |
273 | - /*//VERSÃO QUE EXTRAIA TODOS ZIPS NA PASTA SINAIS | |
155 | + Console.WriteLine("Extraindo pacote de sinais."); | |
274 | 156 | try{ |
275 | - //ARRAY COM PATHS DOS ZIPS: "C:\...\blabla.zip" | |
276 | - string[] zipPaths = Directory.GetFiles(Directory.GetCurrentDirectory()+@"\Sinais\", "*.zip", SearchOption.AllDirectories); | |
277 | - | |
278 | - //ARRAY COM NOMES DOS ZIPS: "blabla" | |
279 | - string[] nomeZips = new string[zipPaths.Length]; | |
280 | - for(int i = 0; i < zipPaths.Length; i++){ | |
281 | - int slashIdx = zipPaths[i].LastIndexOf(@"\"); | |
282 | - int extIdx = zipPaths[i].LastIndexOf(@"."); | |
283 | - //Console.WriteLine("path>> "+zipPath); | |
284 | - //Console.WriteLine("removido a extensão>> "+zipPath.Remove(extIdx, 4)); | |
285 | - //Console.WriteLine("nome do arquivo com extensão>> "+zipPath.Remove(0, slashIdx + 1)); | |
286 | - Console.WriteLine("nome do arquivo sem extensão>> "+zipPaths[i].Remove(extIdx, 4).Remove(0, slashIdx + 1)); | |
287 | - nomeZips[i] = zipPaths[i].Remove(extIdx, 4).Remove(0, slashIdx + 1); | |
288 | - //Console.WriteLine("nomeZips["+i+"]>> "+ nomeZips[i]); | |
289 | - } | |
290 | - | |
291 | - //EXTRAI UM ARQUIVO: "C:\...\pastaComZip\zipado.zip" | |
292 | - //EM: "C:\...\pastaComZip\zipado\arquivoQueEstavaEmZipado" | |
293 | - for(int i = 0; i < nomeZips.Length; i++){ | |
294 | - string extractPath = zipPaths[i]+@"\..\..\..\Bundles\"; //volta duas e cria lá | |
295 | - | |
296 | - //SE O CAMINHO DE EXTRAÇÃO NÃO EXISTE, ELE SERÁ CRIADO | |
297 | - bool exists = System.IO.Directory.Exists(extractPath); | |
298 | - if(!exists){ | |
299 | - System.IO.Directory.CreateDirectory(extractPath); | |
300 | - } | |
301 | - //EXTRAÇÃO DOS ARQUIVOS | |
302 | - using (ZipArchive archive = ZipFile.Open(zipPaths[i], ZipArchiveMode.Read, System.Text.Encoding.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.OEMCodePage))) | |
303 | - { | |
304 | - foreach (ZipArchiveEntry entry in archive.Entries) | |
305 | - { | |
306 | - //POSSO FILTRAR E EXTRAIR APENAS ARQUIVOS QUE TERMINEM COM O VALOR DA STRING | |
307 | - if (entry.FullName.EndsWith("", StringComparison.OrdinalIgnoreCase)) | |
308 | - { | |
309 | - entry.ExtractToFile(Path.Combine(extractPath, entry.FullName), true); | |
310 | - } | |
311 | - } | |
312 | - } | |
313 | - } | |
314 | - //DELETA O ZIP NO FINAL | |
315 | - for(int i = 0; i < zipPaths.Length; i++){ | |
316 | - if(File.Exists(zipPaths[i])){ | |
317 | - File.Delete(zipPaths[i]); | |
318 | - } | |
319 | - } | |
157 | + BundlesManager.ExtractBundlesPackagesOverWrite(rootPath, extractPath, qtdDeBundles); | |
320 | 158 | }catch(Exception e){ |
321 | - Console.WriteLine("ERRO ZipFile: {0}", e); | |
159 | + Console.WriteLine("Erro na extração"); | |
322 | 160 | } |
323 | - */ | |
324 | - /*//VERSÃO QUE CHECAVA UM ARQUIVO DICTIONARY_VERSION.TXT | |
325 | - try{ | |
326 | - //string dictVer = System.IO.File.ReadAllText(@"dictionary_version.txt"); | |
327 | - string[] dictVer = Directory.GetFiles(Directory.GetCurrentDirectory(), "dictVer.txt", SearchOption.AllDirectories); | |
328 | - if(dictVer.Length == 0){ | |
329 | - Console.WriteLine("Path de DictVer.txt: null path"); | |
330 | - }else{ | |
331 | - Console.WriteLine("Path de DictVer.txt: " + dictVer[0]); | |
332 | - } | |
333 | - if(dictVer.Length == 0){ | |
334 | - string[] buscaBundles = Directory.GetFiles(Directory.GetCurrentDirectory(), "Bundles.zip", SearchOption.AllDirectories); | |
335 | - string zipPath = buscaBundles[0]; | |
336 | - string extractPath = buscaBundles[0] + @"\..\Bundles\"; | |
337 | 161 | |
338 | - using (ZipArchive archive = ZipFile.Open(zipPath, ZipArchiveMode.Read, System.Text.Encoding.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.OEMCodePage))) | |
339 | - { | |
340 | - foreach (ZipArchiveEntry entry in archive.Entries) | |
341 | - { | |
342 | - if (entry.FullName.EndsWith("", StringComparison.OrdinalIgnoreCase)) | |
343 | - { | |
344 | - entry.ExtractToFile(Path.Combine(extractPath, entry.FullName), true); | |
345 | - } | |
346 | - } | |
347 | - } | |
348 | - } | |
349 | - }catch(Exception e){ | |
350 | - Console.WriteLine("ERRO ZipFile: {0}", e); | |
351 | - } | |
352 | - */ | |
353 | 162 | |
163 | + //CONCLUSÃO | |
354 | 164 | Console.WriteLine("Pré-requisitos verificados."); |
355 | - //Console.ReadKey(); | |
356 | - | |
357 | 165 | |
358 | 166 | |
359 | 167 | //RODA O VLIBRAS |
360 | 168 | try{ |
361 | 169 | Process playerProc = new Process(); |
362 | - string[] buscaPlayer = Directory.GetFiles(Directory.GetCurrentDirectory(), "vlibrasPlayer.exe", SearchOption.AllDirectories); | |
170 | + string[] buscaPlayer = Directory.GetFiles(dirAtual, "vlibrasPlayer.exe", SearchOption.AllDirectories); | |
363 | 171 | string player = buscaPlayer[0]; |
364 | 172 | playerProc.StartInfo.FileName = player; |
365 | 173 | playerProc.EnableRaisingEvents = true; |
... | ... | @@ -374,6 +182,7 @@ namespace AU |
374 | 182 | Application.SetCompatibleTextRenderingDefault(false); |
375 | 183 | Application.Run(new Form1()); |
376 | 184 | */ |
185 | + | |
377 | 186 | } |
378 | 187 | } |
379 | 188 | } | ... | ... |
... | ... | @@ -0,0 +1,97 @@ |
1 | +using System; | |
2 | +using Microsoft.Win32; | |
3 | + | |
4 | +namespace VLIBRAS_II | |
5 | +{ | |
6 | + class Requirements | |
7 | + { | |
8 | + public static bool IsInstalled(RegistryKey[] regs){ | |
9 | + foreach(RegistryKey reg in regs){ | |
10 | + if(reg != null){ | |
11 | + return true; | |
12 | + } | |
13 | + } | |
14 | + return false; | |
15 | + } | |
16 | + | |
17 | + public static bool IsInstalled(RegistryKey reg){ | |
18 | + if(reg != null){ | |
19 | + return true; | |
20 | + }else{ | |
21 | + return false; | |
22 | + } | |
23 | + } | |
24 | + | |
25 | + public static void Uninstall(RegistryKey[] regs){ | |
26 | + foreach(RegistryKey reg in regs){ | |
27 | + if(IsInstalled(reg)){ | |
28 | + try{ | |
29 | + System.Diagnostics.Process uninsProc = new System.Diagnostics.Process(); | |
30 | + System.Diagnostics.ProcessStartInfo uninsProcInfo = new System.Diagnostics.ProcessStartInfo(); | |
31 | + uninsProcInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; | |
32 | + uninsProcInfo.FileName = "cmd.exe"; | |
33 | + string comandoUnins; | |
34 | + comandoUnins = "/C" + reg.GetValue("QuietUninstallString").ToString().Replace("\"", ""); | |
35 | + uninsProcInfo.Arguments = comandoUnins; | |
36 | + uninsProc.StartInfo = uninsProcInfo; | |
37 | + uninsProc.Start(); | |
38 | + //uninsProc.WaitForExit(); | |
39 | + }catch(Exception e){ | |
40 | + //NOTHING | |
41 | + } | |
42 | + } | |
43 | + } | |
44 | + } | |
45 | + | |
46 | + public static void Install(string pathInstaller64, string pathInstaller86){ | |
47 | + string pathInstaller; | |
48 | + if(Environment.Is64BitOperatingSystem){ | |
49 | + pathInstaller = pathInstaller64; | |
50 | + }else{ | |
51 | + pathInstaller = pathInstaller86; | |
52 | + } | |
53 | + if(pathInstaller == ""){ | |
54 | + return; | |
55 | + } | |
56 | + string comandoIns = "/C" + pathInstaller; | |
57 | + //Process e Process Information | |
58 | + System.Diagnostics.ProcessStartInfo insProcInfo = new System.Diagnostics.ProcessStartInfo(); | |
59 | + insProcInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; | |
60 | + System.Diagnostics.Process insProc = new System.Diagnostics.Process(); | |
61 | + | |
62 | + insProcInfo.FileName = "cmd.exe"; | |
63 | + insProcInfo.Arguments = comandoIns; | |
64 | + //insProcInfo.Verb = "runas"; //ADM | |
65 | + | |
66 | + insProc.StartInfo = insProcInfo; | |
67 | + insProc.Start(); | |
68 | + //insProc.WaitForExit(); | |
69 | + } | |
70 | + | |
71 | + public static void InstallAndWait(string pathInstaller64, string pathInstaller86){ | |
72 | + string pathInstaller; | |
73 | + if(Environment.Is64BitOperatingSystem){ | |
74 | + pathInstaller = pathInstaller64; | |
75 | + }else{ | |
76 | + pathInstaller = pathInstaller86; | |
77 | + } | |
78 | + if(pathInstaller == ""){ | |
79 | + return; | |
80 | + } | |
81 | + string comandoIns = "/C" + pathInstaller; | |
82 | + //Process e Process Information | |
83 | + System.Diagnostics.ProcessStartInfo insProcInfo = new System.Diagnostics.ProcessStartInfo(); | |
84 | + insProcInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; | |
85 | + System.Diagnostics.Process insProc = new System.Diagnostics.Process(); | |
86 | + | |
87 | + insProcInfo.FileName = "cmd.exe"; | |
88 | + insProcInfo.Arguments = comandoIns; | |
89 | + //insProcInfo.Verb = "runas"; //ADM | |
90 | + | |
91 | + insProc.StartInfo = insProcInfo; | |
92 | + insProc.Start(); | |
93 | + insProc.WaitForExit(); | |
94 | + } | |
95 | + | |
96 | + } | |
97 | +} | ... | ... |