El archivo d3d11.dll si que se encuentra en el equipo y he intentado reinstalar el programa y sale el mismo error.
Es un archivo crítico de DirectX ( Direct3D 11 ), y suponiendo que tengas un Windows de 64.Bits, entonces deberías tener
dos archivos "d3d11.dll", uno ubicado en el directorio 'C:\Windows\System32', y el otro en 'C:\Windows\SysWOW64' (y además dos copias de seguridad adicionales en el directorio 'C:\Windows\WinSXS'), cada dll es de distinta aqruitectura, como es evidente, y de una versión/build específica de dicha dll.
Por ese motivo que acabo de explicar arriba... ni se te ocurra hacer eso de descargar las dll faltantes desde el típico sitio web donde te ofrecen descargas de dlls.. por que así no vas a arreglar nada, es perder el tiempo. Hay que saber lo que uno se hace con ese tipo de sitios y lo que se descarga.
Para empezar, mi recomendación es que pruebes a ejecutar la aplicación
dxdiag.exe (ubicada en 'C:\Windows\System32\') y muéstranos los resultados del diagnóstico.
También puedes probar a escribir el siguiente comando en la consola de Windows (CMD.exe):
...De esta forma, y siempre que las copias de seguridad de "d3d11.dll" existan en tu sistema operativo (en el directorio WinSXS como ya expliqué) entonces los archivos perdidos o corruptos de DirectX se deberían restaurar a su estado original y funcional.
Y si eso tampoco te funcionase, pues prueba a descargarte el paquete de DirectX e intentar instalarlo para tratar de resolver el problema:
Repositorio de Runtimes y SDKs (descargas oficiales)PD: ¿Estás utilizando un Windows 7 modificado, u original?.
Añadiendo más información a lo que te ha sugerido el compañero @
Orubatosu :
Suponiendo que tu instalación de DirectX sea correcta, es decir, que no tengas ningún archivo perdido o corrupto y el problema en realidad sea de ese "programa.exe" que al parecer es incapaz de encontrar el archivo "d3d11.dll" a pesar de tener DirectX bien instalado, pues en ese caso también puedes probar a copiar el archivo "d3d11.dll" al directorio raíz donde se encuentre ese "programa.exe", es decir, colocarlo (copiarlo) en la misma carpeta junto al exe.
¿Por qué hacer eso?, pues por que Windows/las aplicaciones por defecto utilizan un patrón de búsqueda con un orden específico para encontrar "dlls conocidas", y en la secuencia de búsqueda el directorio donde se encuentre el archivo executable es uno de los lugares donde se busca una dll/dependencia del programa (aunque esto no siempre es así, ya que hay excepciones), y éste es por defecto el primer lugar de todos donde se empezará a buscar la dll ( antes que en el directorio 'C:\Windows' y 'C:\Windows\System32'|'SysWOW64' ).
Saludos.