Integración en el menú contextual del Explorador de Windows

Quiero escribir una pequeña herramienta que haga lo siguiente:

Cuando hace clic derecho en un archivo con cierta extensión de archivo, el menú contextual del Explorador de Windows muestra una entrada adicional.

Cuando hace clic en esta entrada, se inicia un cierto EXE con este archivo como uno de sus parámetros.

Me gustaría utilizar C # /. NET 2.0 para esto. Si no es posible, también podría hacerlo con C ++ / Win32.

Mis preguntas son:

  1. ¿Es posible con C # .NET 2.0?
  2. ¿Cuáles son las funciones necesarias para integrar en el menú contextual de Windows Explorer?
  3. ¿Cómo puedo hacer esto permanente? (No quiero reiniciar esta herramienta después de cada arranque)
  4. ¿De qué tengo que tener especial cuidado? (diferentes sistemas operativos, permisos de seguridad, etc.)

    Tendrá que acceder al registro y agregar una clave en la root\\File\\shell o root\Folder\\shell , dependiendo de los elementos en los que desee que aparezca el elemento del menú.

    Pruebe este artículo en CodeProject , es bastante útil.

    Editar: hay otro artículo aquí que puede ser de ayuda.

    Todo lo que necesita hacer es agregar algunas cosas al registro. Entonces, sí, puedes hacer esto con .NET 2.0. Aquí hay un ejemplo de cómo agregar Editar con el Bloc de notas .

    % 1 es el archivo seleccionado si recuerdo bien.

    Incidentalmente, no se admite el uso de .NET para extensiones de shell, debido a la incapacidad actual de alojar múltiples versiones de tiempo de ejecución en el mismo proceso (.NET 4 levantará esta restricción).

    Considere el caso donde tiene dos extensiones de shell; uno para .NET 3.5, uno para .NET 1. ¿Qué tiempo de ejecución se cargará en su proceso? Bueno, es más o menos aleatorio: depende de qué extensión de shell se cargue primero. A veces puede ser el tiempo de ejecución 2.0, a veces puede ser el tiempo de ejecución 1.1.

    Esto también es un problema si un progtwig .NET crea diálogos de archivos comunes; su extensión de shell puede o no cargarse, y puede o no ejecutarse con la versión de tiempo de ejecución correcta.

    Como tal, si baja por la ruta de extensión de Shell debería usar C ++ / COM / Win32 nativo.