Resposta Proposta ActiveX

  • quarta-feira, 11 de julho de 2007 14:12
     
     

    Amigos, estou precisando criar um activeX que instale um aplicativo quando a minha pagina web for chamada, estou usando VS 2005 e não consegui encontrar nenhum exemplo que me desse um rumo, se alguém poder me ajudar eu agradeço.

    um abraço todos.

    Humberto Lins

Todas as Respostas

  • quarta-feira, 11 de julho de 2007 16:59
     
     
    Mas qual seria sua dúvida?
    Como criar o activeX? Como utilizá-lo no HTML? Como fazer para chamar o instalador de seu aplicativo?

    Atenciosamente,
  • quinta-feira, 12 de julho de 2007 13:49
     
     
    Exatamente Luís, todas estas dúvidas!!!
  • segunda-feira, 5 de março de 2012 20:29
     
     Resposta Proposta Contém Código

    Bom irei responder esse tópico para que outros possam se beneficiar ! 

    Para criar Activex é simples, crie um projeto do tipo class library no VS e desenvolva seu projeto normalmente, acesse as propriedades do projeto e marque a opção "REGISTER FOR COMInterop " E nas opções de assembly marque "assembly as COM visible" !
    Adicione uma strong name, va na aba Signing e adicione um novo StrongName ! 
    Depois de adicionado o Strong name abra a classe assemblyinfo.cs e adicione o seguinte: 
    [assembly: AssemblyKeyFile(@"Caminhodasua StrongName /SuaStrongName.snk")]

    Em cima da classe principal do seu user control adicione o seguinte: 

    [Guid("57F0CFD4-A2FF-4FB1-BDDF-78BBB732DD3F")]
        [ClassInterface(ClassInterfaceType.AutoDual)]
        [ComVisible(true)]
        public partial class Comeco : UserControl, IObjectSafety
        {

    Crie uma interface de segurança e no userControl principal de sua aplicação faça herdar da classe de segurança ! 

    using System;
    using System.Collections.Generic;
    using System.Runtime.InteropServices;
    using System.ComponentModel;
    using System.Text;
    
    namespace Activex
    {
    	[
    		Serializable,
    		ComVisible(true)
    	]
    	public enum ObjectSafetyOptions
    	{
    		INTERFACESAFE_FOR_UNTRUSTED_CALLER = 0x00000001,
    		INTERFACESAFE_FOR_UNTRUSTED_DATA = 0x00000002,
    		INTERFACE_USES_DISPEX = 0x00000004,
    		INTERFACE_USES_SECURITY_MANAGER = 0x00000008
    	};
    
    	//
    	// MS IObjectSafety Interface definition
    	//
    	[
    		ComImport(),
    		Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064"),
    		InterfaceType(ComInterfaceType.InterfaceIsIUnknown)
    	]
    	public interface IObjectSafety
    	{
    		[PreserveSig]
    		long GetInterfaceSafetyOptions( ref Guid iid, out int pdwSupportedOptions, out int pdwEnabledOptions);
    
    		[PreserveSig]
    		long SetInterfaceSafetyOptions( ref Guid iid, int dwOptionSetMask, int dwEnabledOptions);
    	};
    
    	//
    	// Provides a default Implementation for
    	// safe scripting.
    	// This basically means IE won't complain about the
    	// ActiveX object not being safe
    	//
    	public class IObjectSafetyImpl : IObjectSafety
    	{
    		private ObjectSafetyOptions m_options =
    			ObjectSafetyOptions.INTERFACESAFE_FOR_UNTRUSTED_CALLER | 
    			ObjectSafetyOptions.INTERFACESAFE_FOR_UNTRUSTED_DATA;
    
    		#region [IObjectSafety implementation]
    		public long GetInterfaceSafetyOptions( ref Guid iid, out int pdwSupportedOptions, out int pdwEnabledOptions)
    		{
    			pdwSupportedOptions = (int)m_options;
    			pdwEnabledOptions = (int)m_options;
    			return 0;
    		}
    
    		public long SetInterfaceSafetyOptions(ref Guid iid, int dwOptionSetMask, int dwEnabledOptions)
    		{
    			return 0;
    		}
    
    		#endregion
    	};
    }
    

    No construtor do seu Control principal adicione o seguinte código para dar permissão de exibição de Controle Activex na web !

    using System.Security.Permissions;
    using System.Runtime.InteropServices;

    SecurityPermission permission;

    public Comeco() { try { permission = new SecurityPermission(PermissionState.Unrestricted); permission.Assert(); } catch (Exception) { MessageBox.Show("Control does not have required priveleges.\r\nPlease contact your administrator"); } InitializeComponent(); }


     

    Depois disso compile em modo release ! 
    Pronto, está criado o Activex ! 

    //------ COMO EXPOR ACTIVEX EM PÁGINA .ASPX

    É simples, para expor seu ActiveX apenas crie um projeto web e na página adicione o seguinte código:

    <div>
            <object id="ActivexTesteClient" classid="CLSID:57F0CFD4-A2FF-4FB1-BDDF-78BBB732DD3F" codebase="ActivexTesteClient.cab" width="600" height="600" ></object>
        </div>

    Para chamar um instalador é simples, crie seu instalador, pode ser com o INNOSETUP ou até mesmo com o próprio Projeto do VS Instaler ! e no "CodeBase do object referencie seu instalador ! "
    Para saber mais como criar instaladores pesquise ! Aqui no próprio MSDN tem alguma coisa, senão faça uma nova pergunta que eu explico !  


    Bom era isso, se a resposta for útil marque-a como tal ! 

    Att Anderson Magri


    anderson magri

    • Sugerido como Resposta Anderson Magri segunda-feira, 5 de março de 2012 20:30
    •