2009-04-05 31 views
5

Tenemos una máquina en particular Vista x64 que, cuando se ejecuta nuestra C# WinForms aplicación, se muestra el siguiente error:No es posible encontrar un punto de entrada llamado 'TaskDialogIndirect' en DLL 'ComCtl32'

System.EntryPointNotFoundException: Unable to find an entry point named 'TaskDialogIndirect' in DLL 'ComCtl32'.

Este mismo código funciona bien en otras máquinas Vista. Por alguna razón, esta máquina de Vista en particular siempre arroja esta excepción.

¿Cómo podemos solucionar esto?

Respuesta

7

Tuve problemas con esto y el XTaskDialog API libre de Naughis, para obtener un mecanismo de respaldo en las máquinas con Windows XP mediante la emulación, haciendo que esta implementación de diálogo sea mucho más útil. :)

En mi caso fue un problema de contexto de activación, como se menciona en este blog entry.

O, citado aquí, en caso de que el blog se pierde en el ciberespacio un día (se aplica a Visual Studio):

  1. Abra las propiedades del proyecto en el Explorador de soluciones,
  2. En la ficha Seguridad, Dale a permitir la configuración de seguridad de ClickOnce,
  3. Ahora se puede ver que aparece el archivo en la carpeta app.manifest Propiedades de su solución, abrirlo,
  4. debajo de la etiqueta </trustInfo >, introduzca el código de abajo.
  5. Si intenta compilar, puede haber un error. Para solucionarlo, desmarque Habilitar la configuración de seguridad de ClickOnce.

El código para insertar en el paso 4:

<dependency> 
    <dependentAssembly> 
    <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" 
     version="6.0.0.0" processorArchitecture="*" 
     publicKeyToken="6595b64144ccf1df" language="*" /> 
    </dependentAssembly> 
</dependency> 
+0

Gracias, haremos una prueba. –

+0

Tengo el mismo problema en un proyecto de biblioteca dll (complemento de Excel). ¿No hay una pestaña de seguridad en VS studio para proyectos de biblioteca? –

+1

Actualmente (VS 2012/2013) esta solución no funciona :(Sin embargo, funciona como un amuleto: http://support.microsoft.com/kb/830033 –

1

Sugeriría comparar la versión de comctl32.dll en las máquinas Vista que no funcionan y trabajar, y comparar sus sumas de comprobación incluso si informan la misma versión.

Otras cosas a comprobar:

  • ¿Es posible que la máquina no trabaja tiene una versión previa al lanzamiento de Vista?
  • ¿Es posible que se haya copiado en la máquina una versión que no sea Vista de comctl32.dll y la aplicación la esté recogiendo? (La utilidad Depends que viene con Visual Studio puede ayudar aquí.)
  • ¿Es posible que un virus o gusano (o lo que no) haya reemplazado al comctl32.dll?

También podría valer la pena leer este article en contextos de activación.

+0

Gracias, vamos a echar un vistazo a esto. Si nos lleva a la respuesta, aceptaré su respuesta como correcta. –

1

Si las otras máquinas que utilizó para ejecutar el programa usaban Vista x86, es probable que haya un PInvoke en su código que está causando el problema. Puede intentar establecer la arquitectura de destino del compilador en x86 para forzar a su programa a ejecutarse en WoW64 en la Vista x64. De forma predeterminada, Visual Studio usa configuraciones que crean ensamblajes de forma independiente de la arquitectura. Eso significa que cuando intenta ejecutar un programa .NET en un sistema de 64 bits, debe ejecutarse alojado en una versión nativa x64 del CLR. Intentar cargar una DLL de 32 bits en ese contexto fallará. Obligar a la aplicación a ejecutarse en modo emulado x86, en su lugar, debería hacer el truco.

+0

Gracias, pero ya hemos configurado la aplicación para compilar como x86, ya que usamos algunos componentes que no están listos para x64. –

Cuestiones relacionadas