es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se pueden cargar DLL externas desde una aplicación empaquetada en MSIX.

Lo que funciona en una aplicación de escritorio normal

Cuando intentamos cargar una dll desde una aplicación de escritorio normal, el sistema verifica automáticamente los directorios especificados en la variable de entorno “PATH” y finalmente encuentra la dll. Por ejemplo, estamos usando las dll de NVidia CUDA de esta manera.

Lo que no funciona cuando la aplicación se empaca en MSIX

Cuando empacamos esta aplicación en MSIX, las dll ya no se pueden encontrar, porque la aplicación empacada no verifica las carpetas especificadas en la variable de entorno “PATH”.

En algunos casos, una solución alternativa sería cargar la dll de forma dinámica desde el código, pero solo funciona cuando la dll no tiene dependencias. De lo contrario, la dll cargada no puede encontrar sus dependencias.

¿Cuál es el enfoque recomendado para cargar las dlls cuya ruta está definida en la variable de entorno “path” desde una aplicación empacada en MSIX?

  • Plataforma: Windows 10/11
  • Lenguaje: .NET/C#
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El enfoque recomendado para cargar las dlls desde una aplicación empacada en MSIX, que se supone deben cargarse desde una ruta definida en la variable de entorno “PATH”, es utilizar la ruta completa de la dll al cargarla dinámicamente desde el código. Esto se puede lograr utilizando la propiedad AppContext.BaseDirectory, que devuelve el directorio base de la aplicación, y luego agregando el nombre de la dll. El fragmento de código para lograr esto en .NET/C# es el siguiente:

    string dllPath = Path.Combine(AppContext.BaseDirectory, "dllName.dll");
    IntPtr handle = LoadLibrary(dllPath);
    

    Tenga en cuenta que este enfoque puede no funcionar si la dll tiene dependencias, en cuyo caso es posible que necesite utilizar una herramienta como Dependency Walker para identificar las dependencias y cargarlas dinámicamente antes de cargar la dll principal.

Comments are closed.