|
GRUPOS DE DISCUSSÃO PROFISSIONAL WINDEV, WEBDEV e WINDEV Mobile |
| | | | | |
| Inicio → WINDEV 25 → Como fazer o controle Html que usa CEF - Chromium volte a funcionar ou habilitar uma máquina que não tem esses arquivos? |
| Como fazer o controle Html que usa CEF - Chromium volte a funcionar ou habilitar uma máquina que não tem esses arquivos? |
| Iniciado por Boller, jul., 10 2025 10:55 PM - Sem resposta |
| |
| | | |
|
| |
Membro registado 4.618 mensagems |
|
| Publicado em julho, 10 2025 - 10:55 PM |
Como fazer o controle Web control Html que usa Chromium volte a funcionar ou habilitar uma máquina que não tem esses arquivos?
Quando o controle HTML baseado no Chromium (HTML Control/WebControl) do WebDev ou do WinDev para Web para de funcionar em algumas máquinas, especialmente ao tentar carregar páginas Web, isso pode estar relacionado a dependências do Chromium Embedded Framework (CEF), permissões, ou configurações locais do sistema.
Aqui está uma lista de verificação detalhada e soluções práticas para restaurar o funcionamento:
⸻
✅ 1. Verificar se o Chromium Embedded Framework está presente
O controle HTML baseado no Chromium exige que os arquivos do CEF estejam corretamente instalados. Verifique: • Se os seguintes arquivos existem na pasta da aplicação (geralmente em .\Exe\ ou .\Framework\):
libcef.dll subprocess.exe icudtl.dat locales\ (pasta com arquivos .pak) cef.pak, devtools_resources.pak etc.
• Se estiver faltando, reinstale ou copie os arquivos do diretório Program Files (x86)\PC SOFT\WEBDEV xx\Programs\Framework\ para a pasta da aplicação.
⸻
✅ 2. Instalar o pacote CEF redistribuível
Se seu aplicativo for desktop (WinDev), o controle HTML requer o pacote redistribuível do CEF.
Link: https://doc.pcsoft.fr/?1013669 Busque por “Redistribution of the Chromium component”.
⸻
✅ 3. Verificar versões incompatíveis do WebDev
Algumas atualizações do Chromium ou do WebDev podem causar incompatibilidades: • Certifique-se de que todas as máquinas estão com a mesma versão do WebDev/WinDev Runtime (WDL). • Recompile o projeto com a versão mais recente disponível do WebDev se for possível.
⸻
✅ 4. Verificar permissões de firewall e antivírus
Alguns antivírus/firewalls bloqueiam a execução do subprocess.exe ou do libcef.dll. • Adicione exceções no antivírus para: • libcef.dll • subprocess.exe • O executável da aplicação principal • Execute como administrador e veja se o controle volta a funcionar.
⸻
✅ 5. Instalar Visual C++ Redistributables
O Chromium depende de bibliotecas C++ específicas. Instale: • Microsoft Visual C++ Redistributable for Visual Studio 2015, 2017, 2019 e 2022 (x86 e x64) Link direto: https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist
⸻
✅ 6. Modo de fallback: usar WebBrowser padrão (IE)
Caso o Chromium não esteja funcionando em todas as máquinas, você pode configurar o controle HTML temporariamente para usar o motor do Internet Explorer, nas propriedades do controle:
Control > Description > Advanced > Use Internet Explorer engine (instead of Chromium)
Isso pode ser feito programaticamente ou via interface, mas cuidado: essa engine está obsoleta.
⸻
✅ 7. Ativar logs para diagnóstico
Adicione código para capturar erros na carga da página ou no controle HTML:
IF ErrorOccurred() THEN Error("Erro ao carregar HTML: " + ErrorInfo(errMessage)) END
⸻
✅ 8. Configuração do Proxy ou Certificados SSL
Algumas páginas WebDev podem não carregar por: • Falta de proxy configurado no Chromium • Certificados inválidos
Você pode testar navegando diretamente no Chromium do Windows. Se a página não abre lá, o problema é de rede/SSL.
⸻
✅ 9. Verificar a inicialização manual do controle HTML
Em alguns casos, chamar manualmente HTMLDisplay ou HTMLExecute pode ajudar, por exemplo:
HTMLDisplay(HTML_MeuControle, "https://seudominio.com/suaPagina.awp")
⸻
✅ 10. Atualizar o driver gráfico das máquinas
Em PCs mais antigos, a renderização do CEF pode falhar por conta de drivers de GPU desatualizados.
⸻
🛠 Diagnóstico rápido para aplicar em cada máquina:
Checagem Status Arquivos do CEF estão presentes? ✅ / ❌ subprocess.exe não está bloqueado? ✅ / ❌ Visual C++ 2015+ instalado? ✅ / ❌ Antivírus está bloqueando o controle? ✅ / ❌ Funciona ao mudar para IE engine? ✅ / ❌ Página Web funciona no Chrome/Edge? ✅ / ❌
⸻
Segue um script WLanguage completo (WinDev ou WebDev Desktop) que faz um diagnóstico automático quando o controle HTML baseado no Chromium não está funcionando corretamente.
Ele verifica: • Se o libcef.dll e o subprocess.exe estão presentes • Se os Redistribuíveis do Visual C++ estão instalados • Se a página está acessível via HTMLDisplay • Se houve erro na execução
⸻
✅ Procedure: DiagnosticoControleHTML()
// Procedure para diagnosticar problemas no controle HTML Chromium PROCEDURE DiagnosticoControleHTML(ControleHTML is Control)
// Título padrão sTitulo is string = "Diagnóstico do Controle HTML (Chromium)" sLog is string = "" bErroDetectado is boolean = False
// Caminho da aplicação sDirExe is string = fExeDir()
// Verificações de arquivos essenciais IF NOT fFileExist(sDirExe + "\libcef.dll") THEN sLog += "❌ libcef.dll ausente na pasta da aplicação: " + sDirExe + CR bErroDetectado = True ELSE sLog += "✅ libcef.dll encontrado." + CR END
IF NOT fFileExist(sDirExe + "\subprocess.exe") THEN sLog += "❌ subprocess.exe ausente na pasta da aplicação." + CR bErroDetectado = True ELSE sLog += "✅ subprocess.exe encontrado." + CR END
// Verificação de Redistribuível Visual C++ IF NOT APIExist("MSVCP140.dll") THEN sLog += "⚠️ Microsoft Visual C++ Redistributable pode não estar instalado (faltando MSVCP140.dll)." + CR bErroDetectado = True ELSE sLog += "✅ Visual C++ Redistributable detectado." + CR END
// Testar exibição de página Web sPaginaTeste is string = "https://www.google.com" // Ou sua página AWP
ErrorReset() HTMLDisplay(ControleHTML, sPaginaTeste)
// Espera para carregar (assíncrono no Chromium) Multitask(1000)
// Verifica erro de execução IF ErrorOccurred() THEN sLog += "❌ Erro ao carregar a página: " + ErrorInfo(errFullDetails) + CR bErroDetectado = True ELSE sLog += "✅ Página carregada com sucesso: " + sPaginaTeste + CR END
// Diagnóstico final IF bErroDetectado THEN Info("Foram encontrados problemas na execução do controle HTML.", ... sLog, ... "Recomendações:" + CR + ... "- Verifique se os arquivos do CEF estão completos." + CR + ... "- Instale o Visual C++ Redistributable 2015-2022." + CR + ... "- Libere subprocess.exe no antivírus/firewall.") ELSE Info("✅ Diagnóstico concluído: o controle HTML está funcionando corretamente." + CR + ... sLog) END
⸻
📌 Como usar:
No botão de teste ou no início do seu app, chame:
DiagnosticoControleHTML(HTML_MeuControle)
⸻
🛡️ O que mais pode ser adicionado?
• Teste da existência de pasta .\locales\ • Verificação se o Chromium foi forçado para o modo IE • Exportação do log para .txt • Envio do relatório via email para o suport
Abaixo está a versão estendida da procedure DiagnosticoControleHTML(), com os seguintes aprimoramentos:
⸻
🔧 Novidades adicionadas: 1. ✅ Verifica se a pasta .\locales\ existe e contém arquivos .pak 2. ⚙️ Verifica se o controle HTML está em modo Internet Explorer (fallback, menos compatível) 3. 📝 Exporta o log para um arquivo .txt na pasta do executável 4. 📧 (Opcional) Envia o relatório por email (se configurado) 5. 🧠 Comentários para facilitar personalizações futuras
⸻
🧩 Procedure Completa: DiagnosticoControleHTMLAvancado
PROCEDURE DiagnosticoControleHTMLAvancado(ControleHTML is Control)
// 🧠 Personalize aqui seu e-mail de suporte EMAIL_SUPORTE is string = "suporte@seudominio.com.br"
// Nome do log sArquivoLog is string = fExeDir() + "\Log_Diagnostico_HTML.txt" fSaveText(sArquivoLog, "") // Limpa o log anterior
sTitulo is string = "Diagnóstico Avançado - Controle HTML (Chromium)" sLog is string bErroDetectado is boolean = False
// Caminho base sDirExe is string = fExeDir()
// 🔍 Verificar arquivos principais do CEF IF NOT fFileExist(sDirExe + "\libcef.dll") THEN sLog += "❌ libcef.dll ausente.\n" bErroDetectado = True ELSE sLog += "✅ libcef.dll OK.\n" END
IF NOT fFileExist(sDirExe + "\subprocess.exe") THEN sLog += "❌ subprocess.exe ausente.\n" bErroDetectado = True ELSE sLog += "✅ subprocess.exe OK.\n" END
// 🔍 Verificar pasta de idiomas IF NOT fDirectoryExist(sDirExe + "\locales") THEN sLog += "❌ Pasta 'locales' ausente.\n" bErroDetectado = True ELSE arrFiles is array of strings = fListFile(sDirExe + "\locales\*.pak", frFile) IF ArrayCount(arrFiles) = 0 THEN sLog += "❌ Pasta 'locales' existe mas sem arquivos .pak.\n" bErroDetectado = True ELSE sLog += "✅ Pasta 'locales' OK (" + arrFiles..Count + " arquivos .pak).\n" END END
// 🔍 Verificar Visual C++ Redistribuível IF NOT APIExist("MSVCP140.dll") THEN sLog += "⚠️ Pode faltar o Visual C++ Redistributable (MSVCP140.dll ausente).\n" bErroDetectado = True ELSE sLog += "✅ Visual C++ Runtime OK.\n" END
// 🔍 Verificar se está em modo Internet Explorer (menos compatível) IF HTMLUseIEEngine(ControleHTML) = True THEN sLog += "⚠️ Controle HTML está forçado para usar Internet Explorer (menos compatível).\n" ELSE sLog += "✅ Controle HTML está usando Chromium.\n" END
// 🌐 Testar navegação real sTesteURL is string = "https://www.google.com" ErrorReset() HTMLDisplay(ControleHTML, sTesteURL) Multitask(1000)
IF ErrorOccurred() THEN sLog += "❌ Erro ao exibir a página: " + ErrorInfo(errMessage) + "\n" bErroDetectado = True ELSE sLog += "✅ Página de teste carregada: " + sTesteURL + "\n" END
// 📝 Exportar para .txt fSaveText(sArquivoLog, sLog) sLog += "\n📁 Relatório salvo em: " + sArquivoLog + "\n"
// 📧 Envio por e-mail (opcional - precisa configurar SMTP manualmente) IF EMAIL_SUPORTE <> "" THEN sLog += "✉️ Você pode enviar o arquivo '" + sArquivoLog + "' para: " + EMAIL_SUPORTE + "\n" END
// 📢 Exibir resultado ao usuário IF bErroDetectado THEN Info("❌ Foram encontrados problemas no controle HTML Chromium.\n\n" + sLog, sTitulo) ELSE Info("✅ Diagnóstico concluído com sucesso!\n\n" + sLog, sTitulo) END
⸻
✅ Como usar:
// Chamando a procedure passando o nome do seu controle HTML DiagnosticoControleHTMLAvancado(HTML_Viewer)
⸻
📌 Requisitos adicionais:
Se quiser enviar o log automaticamente por email, posso incluir um código usando EmailStartSession, EmailSendMessage com SMTP (por exemplo, Gmail SMTP ou serviço interno).
Sim, é possível adicionar exceções ao Firewall do Windows via WLanguage, automaticamente, para liberar o uso de arquivos como subprocess.exe, libcef.dll e outros componentes do Chromium usados pelo controle HTML do WinDev/WebDev.
⚠️ IMPORTANTE: • Isso requer permissões de administrador. • O método utiliza o comando do Windows netsh advfirewall, que você pode chamar via ShellExecute ou fRun.
⸻
✅ Exemplo de código WLanguage: Liberar subprocess.exe no Firewall do Windows
PROCEDURE LiberarNoFirewall(sCaminhoArquivo is string)
// Exemplo: sCaminhoArquivo = fExeDir() + "\subprocess.exe"
// Nome para regra de exceção sNomeRegra is string = "WX Chromium - " + fExtractPath(sCaminhoArquivo, fFileName)
IF NOT fFileExist(sCaminhoArquivo) THEN Info("Arquivo não encontrado: " + sCaminhoArquivo) RETURN END
// Comando para adicionar regra no Firewall (entrada e saída) sComandoEntrada is string = "netsh advfirewall firewall add rule name=""" + sNomeRegra + " In""" + ... " dir=in action=allow program=""" + sCaminhoArquivo + """ enable=yes"
sComandoSaida is string = "netsh advfirewall firewall add rule name=""" + sNomeRegra + " Out""" + ... " dir=out action=allow program=""" + sCaminhoArquivo + """ enable=yes"
// Executa como administrador (shell invisível) ShellExecute(sComandoEntrada, "", "", "runas", SW_HIDE) ShellExecute(sComandoSaida, "", "", "runas", SW_HIDE)
Info("Regras adicionadas ao firewall para o arquivo: " + fExtractPath(sCaminhoArquivo, fFileName))
⸻
📌 Como usar para liberar os principais arquivos do CEF:
LiberarNoFirewall(fExeDir() + "\subprocess.exe") LiberarNoFirewall(fExeDir() + "\libcef.dll") // opcional: nem sempre precisa LiberarNoFirewall(fExeDir() + "\meuApp.exe") // seu executável principal
⸻
📂 Outros arquivos úteis para liberar se estiverem presentes: • chrome_elf.dll • cef.pak, devtools_resources.pak • locales\*.pak
A regra do firewall só aceita programas .exe. Para DLLs, a liberação depende do processo que as carrega, portanto liberar o executável principal e o subprocess.exe já é suficiente na maioria dos casos.
⸻
🛡️ Validação
Após executar, você pode validar manualmente:
netsh advfirewall firewall show rule name="WX Chromium - subprocess In"
Ou listar todas com:
netsh advfirewall firewall show rule name=all
⸻
Abaixo está a procedure genérica LiberarCEFNoFirewall(), que:
✅ Faz automaticamente: • Detecta os arquivos principais do Chromium (CEF) na pasta do executável • Libera os .exe necessários no Firewall do Windows (entrada e saída) • Usa ShellExecute(..., "runas") para garantir que execute com permissões elevadas • Evita duplicação e exibe um Info() amigável ao final
⸻
🧩 Procedure Completa: LiberarCEFNoFirewall
PROCEDURE LiberarCEFNoFirewall()
sTitulo is string = "Liberar Chromium no Firewall (WinDev/WebDev)" arrArquivosParaLiberar is array of string
// Pasta do executável sDir is string = fExeDir()
// Arquivos essenciais do Chromium (CEF) arrArquivosParaLiberar.Add(sDir + "\subprocess.exe") arrArquivosParaLiberar.Add(sDir + "\meuApp.exe") // Altere para o nome do seu executável principal
// Opcionalmente, adicione mais executáveis relevantes se houver // arrArquivosParaLiberar.Add(sDir + "\cefclient.exe")
// Logs sLog is string = "" nLiberados is int = 0
FOR EACH sArq OF arrArquivosParaLiberar
IF fFileExist(sArq) THEN sNomeRegra is string = "WX Chromium - " + fExtractPath(sArq, fFileName)
sCmdIn is string = "netsh advfirewall firewall add rule name=""" + sNomeRegra + " In""" + ... " dir=in action=allow program=""" + sArq + """ enable=yes" sCmdOut is string = "netsh advfirewall firewall add rule name=""" + sNomeRegra + " Out""" + ... " dir=out action=allow program=""" + sArq + """ enable=yes"
// Executa como admin invisível ShellExecute(sCmdIn, "", "", "runas", SW_HIDE) ShellExecute(sCmdOut, "", "", "runas", SW_HIDE)
sLog += "✅ Regras adicionadas para: " + fExtractPath(sArq, fFileName) + "\n" nLiberados += 1 ELSE sLog += "❌ Arquivo não encontrado: " + fExtractPath(sArq, fFileName) + "\n" END
END
IF nLiberados > 0 THEN Info("Regras de firewall aplicadas para " + nLiberados + " arquivo(s).\n\n" + sLog, sTitulo) ELSE Info("Nenhum arquivo liberado. Verifique os caminhos.\n\n" + sLog, sTitulo) END
⸻
📌 Como usar
No início do seu sistema ou em um botão de suporte, chame:
LiberarCEFNoFirewall()
⸻
🧠 Dicas e observações finais • Certifique-se de substituir "meuApp.exe" pelo nome real do seu executável, ou use:
arrArquivosParaLiberar.Add(ExeInfo(exeName))
• A execução pedirá permissão do UAC (controle de conta de usuário) se estiver ativado. • Você pode integrar isso à procedure de diagnóstico anterior, para oferecer uma opção automática ao usuário se falhar o carregamento do controle HTML.
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|