none
WebBrowser - Bloqueando Download e Upload RRS feed

  • Pergunta

  • Pessoal,

    estou usando um componente webbrowser no qual fiz um navegador pra uma aplicação para uso livre dos clientes. Entretanto esse uso "livre" deverá restringir downloads e uploads. Alguém saberia como fazer essa restrição? O ideal seria a restrição através do registro do Windows, mas mesmo com o usuário administrador, em tempo de execução, ocorre uma exceção, dizendo que o usuário nao tem permissão para alterar os valores do registro (Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\1803). Alguem poderia me ajudar, pf ?


    Leandro Alves


    sexta-feira, 19 de abril de 2013 17:57

Respostas

  • Ruy (e galera do fórum)...

    ... consegui a solução que eu preteria. Na verdade tentava suprimir de alguma forma a caixa de diálogo exibido ao clicar no botão de upload (file). Para isso utilizei a função findWindow da DLL user32.dll passando o id da janela (#32770) - vide código abaixo:

            // P/Invoke declarations
            [DllImport("user32.dll", SetLastError = true)]
            static extern IntPtr FindWindow(string id, string caption);
    
            [DllImport("user32.dll")]
            private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
    
            public void Execute()
            {
                IntPtr hWnd = FindWindow("#32770", null);
    
                if (!hWnd.Equals(IntPtr.Zero))
                {
                    SendMessage(hWnd, 0x0010, IntPtr.Zero, IntPtr.Zero);
                }
            }

    Bem, dessa forma funcionou para as versões que testei do Windows 7 (32 e 64 bits). Espero que possa ajudar a mais alguém no futuro quando precisarem de alguma forma suprimir a OpenFileDialog do browser.

    Vlw!


    Leandro Alves

    • Marcado como Resposta Leandro Portnoy segunda-feira, 29 de abril de 2013 18:41
    segunda-feira, 29 de abril de 2013 18:41

Todas as Respostas

  • Ola Leandro,

       Você pretende restringir acesso ao downloads em determinados sites, ou ira retringir todos os download e uploads pela sua aplicação?

       Isso deverá valer para todos os outros webbrowser ou apenas ao seu aplicativo.

       Detalhe mais esse processo, existem diferentes abordagens para isso dependendo do seu caso


    Microsoft Community Contributor

    sábado, 20 de abril de 2013 15:29
    Moderador
  • Então Ruy,

    obrigado primeiramente pela atenção. A restrição será para todos os sites, e queria tentar fazer isso sem alterações através do próprio IE, já que eu terei em torno de 100 aplicações rodando por aí.

    E sim, isso deverá valer somente para o meu aplicativo, sendo que sei que o componente WebBrowser é um IE rodando de forma customizada, digamos assim...

    A restrição de acesso que eu faço para determinados sites já é um tratamento particular que eu fiz também na propria aplicação através da URL digitada no contexto deste WebBrowser. 

    Acho que as informações são essa... Já tentei de vários jeitos, mas o mais interessante foi a alteração de registro através do RegisterKey... entretanto isso não me ajudo por que mesmo com o usuário administrador da máquina houve o bloqueio de acesso a essa chave, o que me gerou um erro. Já Upload, eu não faço a minima idéia de como fazer... Já tentei capturando os elementos HTML entretanto atualmente existem N componentes que possibilitam realizar um UPLOAD (não adianta capturar os elementos Inputs type="File" pois existe componentes em FLASH que fazem esse meio de campo. Queria alguma coisa nativa do Windows... e nem sei se é possível, mas o chefe quer... vai ter de se tornar... rsrsrs!

    Vlw!


    Leandro Alves

    sábado, 20 de abril de 2013 16:29
  • Ola,

        Entendi o seu problema, dei uma pesquisa e acho que encotrei algo que pode ser mais ou menos o seu caminho.... Se voce referenciar o ActiveX SHDocVw (Microsoft Internet Controls, na aba COMs), voce vai conseguir ter acesso a mais funções do seu WebBrowser:

    SHDocVw.WebBrowser axBrowser = (SHDocVw.WebBrowser)webBrowser1.ActiveXInstance;

       Dentre elas eu encontrei isso aqui:

    http://msdn.microsoft.com/en-us/library/aa770041(v=vs.85).aspx#Controlling_Download_and_Execution

    Mais exatamente "DLCTL_NO_CLIENTPULL: No client pull operations will be performed.",

    Outra forma de fazer isso seria pelo Content-type "multipart/form-data", ou controlando o mime  type: application/octet-stream, application/zip, application/x-zip-compressed, etc

    Outra coisa que vc tem que tomar cuidado seria em bloquear todo e qualquer tipo de popup, pq na hora que abre outra janela sai do seu controle (bem, mais ou menos, você ainda tem um certo controle usando a interface SHDocVw.WebBrowser)




        


    Microsoft Community Contributor

    quinta-feira, 25 de abril de 2013 14:09
    Moderador
  • Ruy,

    eu considerei ir por outro caminho que seria suprimir a abertura de caixas de dialogos do Windows (http://stackoverflow.com/questions/12090691/closing-openfiledialog-savefiledialog) entretanto esse código funciona perfeitamente num exemplo que fiz no meu ambiente de desenvolvimento. Gerando o executável e testando em outros clientes simplesmente não funciona. É suprimido algumas caixas de Dialogo entretanto a janela que é aberta para escolher o arquivo de upload ela funciona normalmente. E o pior é que nem sei o motivo disso acontecer invariavelmente. Então continuo sem uma solução direta e efetiva... o negócio é realmente complicado por que o .Net não oferece uma interface pra implementar isso de alguma forma.



    Leandro Alves

    sexta-feira, 26 de abril de 2013 11:47
  • Ruy (e galera do fórum)...

    ... consegui a solução que eu preteria. Na verdade tentava suprimir de alguma forma a caixa de diálogo exibido ao clicar no botão de upload (file). Para isso utilizei a função findWindow da DLL user32.dll passando o id da janela (#32770) - vide código abaixo:

            // P/Invoke declarations
            [DllImport("user32.dll", SetLastError = true)]
            static extern IntPtr FindWindow(string id, string caption);
    
            [DllImport("user32.dll")]
            private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
    
            public void Execute()
            {
                IntPtr hWnd = FindWindow("#32770", null);
    
                if (!hWnd.Equals(IntPtr.Zero))
                {
                    SendMessage(hWnd, 0x0010, IntPtr.Zero, IntPtr.Zero);
                }
            }

    Bem, dessa forma funcionou para as versões que testei do Windows 7 (32 e 64 bits). Espero que possa ajudar a mais alguém no futuro quando precisarem de alguma forma suprimir a OpenFileDialog do browser.

    Vlw!


    Leandro Alves

    • Marcado como Resposta Leandro Portnoy segunda-feira, 29 de abril de 2013 18:41
    segunda-feira, 29 de abril de 2013 18:41