2011-07-12 11 views
5

Actualmente estoy intentando crear una extensión de espacio de nombres de shell (para presentar una carpeta virtual que contenga "subcarpetas" y "archivos", que en realidad son la representación de datos en un árbol jerárquico estructura desde un servicio remoto).Shell Namespace Extension no se carga en Windows 7

La extensión está escrita en C#, que, estoy seguro, solía ser una mala idea, pero desde que .NET 4 introdujo la posibilidad de que diferentes versiones del tiempo de ejecución .NET coexistieran dentro del mismo proceso, pensé la limitación ya no era un problema.

Hasta ahora he conseguido que funcione bien en Windows XP siguiendo los abundantes ejemplos y referencias disponibles en la web, pero cuando lo intento en Windows 7 (todavía no lo he probado en Vista, entonces 'no sé si funcionaría allí), la extensión no está cargada. De acuerdo con mi salida de registro de depuración, se registra bien, pero cuando abro una ventana del Explorador de Windows, parece que no se produce ninguna de las llamadas habituales a las interfaces COM (generalmente comenzando con IPersistFolder :: Initialize). De hecho, ni siquiera se llama al constructor de la clase. No sé si se están consultando las interfaces (con éxito o no) porque no estoy seguro de cómo detectar eso en .NET para poder registrarlo. Entonces, básicamente, no tengo ninguna pista para seguir, porque falla incluso antes de que tenga la oportunidad de registrar cualquier información útil sobre lo que podría estar fallando.

¿Alguien tiene alguna idea de cuál podría ser el problema? ¿Hay alguna peculiaridad en Windows 7 en comparación con Windows XP que deba tenerse en cuenta cuando se trata de extensiones de espacio de nombres de shell que debo tener en cuenta? Si se requieren más detalles, siéntase libre de preguntar (traté de mantenerlo breve, porque estoy seguro de que nadie me agradecería que copiara & pegando todo el código aquí, y no podría cortarlo solo a las partes relevantes porque simplemente no saben cuáles son éstos ...)

+2

Um ... La extensión termina compilada como de 32 bits, y Windows 7 es de 64 bits? .. – GSerg

+0

No, es un Win 7 de 32 bits; Desearía que la solución fuera así de fácil ... –

+0

Esto no responde a su pregunta, pero .NET no es compatible con las extensiones de espacio de nombres de Shell http://msdn.microsoft.com/en-us/library/windows/desktop/dd758089 (v = vs.85) .aspx. –

Respuesta

0

puede ser debido a las razones siguientes:

  1. ¿Tiene su espacio de nombres tiene ninguna dependencia que pueden fallar en cargar?

  2. ¿El registro se realizó con éxito? ¿Realmente revisó el registro si se crearon las entradas correctas? Recuerde que si UAC está activado, es posible que necesite privilegios elevados.


Como alternativa al desarrollo de tales bestias complicados ti mismo, considere el uso de EZNamespaceExtensions - que hace que sea muy fácil y que pueda centrarse en proporcionar su funcionalidad específica NSE.

DESCARGO DE RESPONSABILIDAD: Somos los desarrolladores de EZNamespaceExtensions.

+0

Todas las entradas de registro se ven bien. En lo que respecta a las dependencias, la extensión no usa nada más que el tiempo de ejecución de .NET 4 (que, por supuesto, está instalado). Lamentablemente, no tengo idea de cómo determinar si algo requerido se carga o no, de todos modos. Por cierto, no hay nada en el registro de eventos del sistema que proporcione pistas. Siento que tengo los ojos vendados en la niebla ... –

+0

Gran problema con EZNamespaceExtension.NET. No ha sido actualizado durante mucho tiempo. LogicNP parece haber perdido su interés en EZNamespaceExtension.NET porque no ha habido una versión con nuevas funciones desde 2010. No admite .NET 4 ni soporte para la barra de herramientas de cinta de Windows 8. – tronda

+0

Si bien no ha habido nuevas versiones principales (no es necesario), hemos estado realizando nuevas compilaciones para actualizaciones menores de vez en cuando. .Net 4.0: una vez más falso, de hecho, con el soporte de .NET 4.0 para los tiempos de ejecución lado a lado, el desarrollo de ness en .Net ahora es más fácil. Win8 ribbon: MS no ha documentado la API para realizar la integración de la cinta. Si tiene enlaces a documentos relevantes, compártalos para que podamos agregar esta funcionalidad. – logicnp

3

que tenía un caso muy similar hace un momento:

  • vi a mi extensión de la cáscara en el lugar correcto (en mi caso "Mi PC"), icono y todo.
  • Aún así, no se realizó ninguna instanciación en mi clase COM (comprobé el monitor de proceso) ni ninguna llamada a IPersistFolder :: Initialize.

Estaba usando ATL y 64 bits, así que sabía que .NET no era mi problema.

Resulta que el problema era que no tenía el valor siguiente en el Registro: [HKEY_CLASSES_ROOT \ CLSID \ {su CLSID} \ ShellFolder] "Atributos" = dword: 20000000

(que no es suficiente para que exista la clave o el valor, debe tener (al menos) este valor de atributo específico para comenzar algo).

Después de agregarlo, debe eliminar todos los procesos de explorer.exe y volver a iniciar uno (por ejemplo, mediante el administrador de tareas). Espero que esto resuelva tu problema también.

Cuestiones relacionadas