cómo descargar la dll - página 4

 
OneDepo >> :

Sí, tienes razón, esto reducirá el tiempo de espera para la reescritura de la dll, pero no resolverá el problema principal: indicador descargado - ¡cambia la dll! Claramente, la biblioteca se carga a través de LoadLibrary(), el contador de carga se pone a 1, pero aparentemente no se llama a FreeLibrary() en deinit(). El contador no se pone a 0 y el dll queda bloqueado hasta que se cierra el terminal. Creo que sí, pero hay que consultarlo con los desarrolladores.

¿Quién le impide (excepto a algunos participantes de esta rama) hacer

#importar "kernel32.dll".

int GetModuleHandleA ( cadena sss);
void FreeLibrary(int hhh);
#importar


deinit()

{

handlissimo=GetModuleHandleA("test-dll.dll");

FreeLibrary(handlissimo) ;

}


???

Puede rellenar los parámetros de la función usted mismo. Para borrar TOTALMENTE de la MEMORIA todas las DLL's liberadas de esta manera - debido a las limitaciones de metatrader.exe y debido a la fuerte caché mencionada anteriormente por mí en vinda (que incluye la sustitución de archivos dll protegidos de dllcache) - utilice regsvr32.

Veo que TheExpert está relacionado con MetaQuotes.

 

Nota: a veces incluso regsvr32 no descarga la DLL, y Windows rellena una versión antigua. La práctica demuestra que una sola DLL puede permanecer en la memoria durante SEMANAS. En este caso, sólo una sobrecarga del ordenador ayudará. Si no quieres reiniciar, te ayudarán las formas semi-hacker, como el Process Explorer. Puede descargar de la memoria cualquier cosa desde cualquier lugar, al contrario de lo que afirman los vocingleros de este foro (y cargar también, ja, ja, pero no lo necesita).

http://www.softpedia.com/get/System/System-Info/Process-Explorer.shtml

breve descripción y plugin:

http://rootkits.su/app/ShowApp.aspx?id_a=36

 

Veo que sigues con ello. Muy bien. Esto es lo que la propia MS nos dice sobre regsvr32:


Herramienta Regsvr32: uso y mensajes de error


"La herramienta Regsvr32 (Regsvr32.exe) está diseñada para registrar y desregistrar controles OLE, como archivos DLL u OCX registrados automáticamente. Esto puede ser necesario para solucionar algunos problemas en el sistema Windows, Microsoft Internet Explorer y otros programas. Por ejemplo, según el artículo de la Base de conocimientos de Microsoft que aparece a continuación, se debe utilizar la herramienta Regsvr32.exe para anular el registro del control Wuv3is.dll antes de poder reinstalarlo desde el sitio web del Centro de actualizaciones de Windows.


más:

"La utilidad regsvr32.exe se utiliza para registrar DLLs y controles ActiveX en el registro de Windows. También se puede utilizar para eliminar incoherencias entre archivos DLL".

 
HideYourRichess >> :

Veo que sigues con ello. Muy bien. Esto es lo que la propia MS nos dice sobre regsvr32:


Herramienta Regsvr32: Uso y mensajes de error


"Regsvr32" (Regsvr32.exe) se utiliza para registrar y desregistrar controles OLE como archivos DLL u OCX auto-registrados. Esto puede ser necesario para solucionar algunos problemas en el sistema Windows, Microsoft Internet Explorer y otros programas. Por ejemplo, según el artículo de la base de conocimientos de Microsoft que aparece a continuación, se debe utilizar la herramienta Regsvr32.exe para anular el registro del control Wuv3is.dll antes de reinstalarlo desde el sitio web del Centro de actualizaciones de Windows".


más:

"La utilidad regsvr32.exe se utiliza para registrar DLLs y controles ActiveX en el registro de Windows. También puede utilizarse para eliminar las incoherencias entre los archivos DLL".

Bueno, tío hacker, ya deberías haber adivinado por tu propia última frase cómo nos funciona regsvr32:


http://support.microsoft.com/kb/207132

RegSvr32.exe llama a las siguientes funciones Win32 en este orden:

* OleInitialize
* LoadLibrary para cargar la DLL
* DllRegisterServer o DllUnregisterServer
* FreeLibrary
* OleUninitialize

http://msdn.microsoft.com/en-us/library/ms683152(VS.85).aspx
Función FreeLibrary

Libera el módulo cargado de la biblioteca de enlace dinámico (DLL) y, si es necesario, disminuye su número de referencias.
Cuando el recuento de referencias llega a cero, el módulo se descarga del espacio de direcciones del
proceso y el mango ya no es válido.

Es decir, regsvr32 carga y libera la biblioteca. Pero a diferencia de terminal.exe, que por sí solo o con una solución simple y elegante que sugerí arriba, libera la librería, PERO SIGUE QUEDÁNDOSE EN MEMORIA, (dando razones a Windows para no descargar la librería por ahora y dejar que cualquier otro proceso lo haga) - a diferencia de metatrader colgando en memoria, la utilidad de línea de comandos regsvr32.exe detiene su proceso y sale de la memoria, lo que indica a Windows que descargue completamente la biblioteca de la memoria.

Se puede descargar una biblioteca sin usar regsvr32, pero es una ruleta. A algunos les gusta la ruleta, a la mayoría de los profesionales no, es una cuestión de nivel de desarrollo.

Si la biblioteca es sencilla y no se aferra a MUCHAS otras bibliotecas, PUEDE descargarse rápidamente. Pero si la biblioteca es compleja, con enlaces a bases de datos y controles exóticos, puede tardar minutos o incluso horas en descargarse.

Por cierto, en cuanto al parámetro AlwaysUnloadDLL - la propia Microsoft afirma que esto sólo funcionó hasta el año 2000 (ahora se aplican algoritmos más complicados para calcular "la necesidad de una DLL"):

http://msdn.microsoft.com/en-us/library/bb776795(VS.85).aspx

Descarga de la DLL

El Shell descarga automáticamente una DLL cuando su recuento de uso es cero, pero sólo después de que la DLL no haya sido utilizada durante un período de tiempo. Este periodo de inactividad puede ser inaceptablemente largo a veces, especialmente cuando se está depurando una DLL de extensión de Shell. Para los sistemas operativos anteriores a Windows 2000, puede acortar el periodo de inactividad añadiendo la siguiente información al registro.

  • HKEY_LOCAL_MACHINE
  • Software
  • Microsoft
  • Windows
  • CurrentVersion
  • Explorador
  • AlwaysUnloadDll
 

Como todavía estoy resfriado (pero ojo, incluso estando en la cama con fiebre ayudo a la gente a resolver sus problemas de terminal.exe de forma gratuita, es decir, a resolver sus problemas de dinero exclusivamente), puedo contar a los interesados (y también a los desinformados estudiantes de formación profesional) lo difícil que es trabajar como sysadmins en grandes empresas de larga distancia.

Cualquier gran empresa utiliza herramientas UNIVERSALES. Esto significa que todos los servidores - local y global ejecuta Eorakl, en todas las estaciones de trabajo utilizan el mismo programa de la misma versión de la vinculación de Office, Excel-o programa analítico con Eorakl o MS SQL Server, algunos "dbconnect.dll". Y entonces un día "maravilloso" para los desarrolladores sysadmins finalmente depurar una nueva versión del programa y todos los sysadmins locales (en la empresa de los primeros cien - sysadmins puede ser 500-800, 1,250 Terabyte de memoria de disco duro, 130 nodos NCR, 145 sistemas de servidor Unix y 2600 servidores de Windows, 80.000 usuarios de correo en más de 2.000 lugares corporativos) viene una orden de REEMPLAZO "mañana" este programa. El programa es complejo, utiliza muchas cosas, simplemente reescribirlo en el ordenador no funcionará. Y es necesario reiniciar el ordenador después de regsvr32 - si el administrador del sistema tiene tiempo para ello.

En este reemplazo sólo se puede hacer de 18-00 a 24-00, porque hasta 18-00 los trabajadores de la oficina todavía están trabajando en las computadoras, y en 24-00 en el servidor comienza el trabajo de servicio en Yoraklah, las estaciones comienzan auto-actualización de Windows y auto-renovación de los antivirus. Hay medios para iniciar REMOTAMENTE regsvr32 y sobrecargar la estación sin ir a la estación, pero no siempre funcionan, (Firewall activado, usuario no-logof-lenny, etc.). Y los sysadmin locales de los ordenadores pueden ser 50-100, lejos unos de otros, y en diferentes pisos, y en oficinas ya cerradas.

Así que los administradores de sistemas recorren el edificio de la empresa y ejecutan regsvr32 a mano.

 

Regsvr32 está diseñado para registrar y desregistrar servidores COM.

No todos son dlls. Este es un tipo especial de dll. No es necesario llamar a Regsvr32.

Es suficiente con llamar a FreeLibrary como se muestra arriba o no usar "#import" sino usar el par:

LoadLibrary, FreeLibrary.

Por cierto, mis dlls se liberan por alguna razón inmediatamente después de quitar el indicador.

 

En realidad, personalmente, escribo para los que saben leer en ruso y en inglés. Gente extraña, repiten por décima vez aquí POR QUÉ se creó regsvr32. Lo cantan como un mantra, como un hechizo, mientras que otros no saben por qué. ¿Y qué importa si regsvr32 hace lo que necesitamos que haga y no tiene efectos secundarios?

Es como si un médico de ambulancia o de cuidados intensivos recetara hiposulfito de sodio a un alcohólico ("avanzado" así)

http://drugslist.ru/drugs/antichlor-sodium-thiosulfate/

¡y empieza a gritar que no se lo va a beber porque ..... es un arreglador de fotos y lo quieren envenenar!

http://www.rwwc.ru/recipe/index6.php

Si hay tanta gente inteligente aquí, que nos indiquen OTRA utilidad estándar, que está a mano en cualquier ordenador, que cargaría y descargaría inmediatamente CUALQUIER LIBRERIA que se quiera, para restablecer el caché de las DLLs por parte de Windows de esta manera.

 
AlexEro >> :

...

Por décima vez repiten aquí POR QUÉ se creó regsvr32. ¿Qué importa si regsvr32 hace lo que necesitamos que haga y no tiene efectos secundarios? Lo cantan como un mantra, como un hechizo.

Es como si un médico de ambulancia o de urgencias recetara hiposulfito de sodio a un alcohólico ("avanzado" así)

...

Todo esto es muy importante. Si haces analogías médicas, lo que escribes aquí es como tratar una cabeza enferma con un hacha.


AlexEro >> :

...

La descarga de la biblioteca puede ocurrir SIN usar regsvr32, pero es una ruleta. A algunos les gusta la ruleta, a la mayoría de los profesionales no, es una cuestión de nivel de desarrollo.

Si la biblioteca es sencilla y no se aferra a MUCHAS otras bibliotecas, PUEDE descargarse rápidamente. Pero si la biblioteca es compleja, con bases de datos y controles exóticos, puede tardar minutos o incluso horas en descargarse.

...


Simplemente no entiendes cómo funciona en principio el mecanismo de carga/descarga de dll, por eso tienes fantasías tan enfermizas sobre este tema. No deberías usar regsvr32, no está pensado para ello.Tampoco deberías intentar descargar la librería para desinstalarla usando FreeLibrary, la librería debería descargarse sola, si no hay errores groseros en ella por supuesto. Su "solución simple y elegante" es una tontería. No funcionará en muchos casos, especialmente si se producen bloqueos en el DllMain.


Repito, la única forma normal y correcta de descargar una dll es escribir la propia dll sin errores. Si la dll no se descarga normalmente - entonces las manos del codificador están torcidas (concretamente el codificador, en el propio terminal todo se hace correctamente) - eso es todo. Siempre, repito, siempre he descargado la dll normalmente, inmediatamente después de quitar el indicador. Y esto es correcto, es la forma en que se ha diseñado en el terminal.


Y en vano intentas dar peso a tu ficción refiriéndote a tu experiencia como sysadmin. Ya hemos comprobado que no eres un sysadmin muy inteligente, por lo que parece muy infantil, ridículo.

 
HideYourRichess >> :
Simplemente no entiendes cómo funciona en principio el mecanismo de carga/descarga de dlls, por eso tienes fantasías tan enfermizas en este tema.... (Tampoco deberías intentar descargar una biblioteca para desinstalarla usando FreeLibrary, la biblioteca debería descargarse por sí misma, si no hay errores graves en ella, por supuesto. Su "solución simple y elegante" es una tontería. No funcionará en muchos casos, especialmente si se producen bloqueos en el DllMain.
Tío hacker, no hay lógica en tus palabras: si la biblioteca está SIEMPRE descargada, ¿por qué "mi" llamada a FreeLibrary según tú "no funcionará en muchos casos"? ¿Qué daño podría causar una llamada extra a FreeLibrary en el bloque deinit()? En su opinión, ¿llamar a FreeLibrary() bloquearía de alguna manera la liberación de la biblioteca o algo así? Eso no está claro, tío cool hacker, y es obvio.
 
AlexEro >> :
Tío hacker, no hay ninguna lógica en lo que estás diciendo

1ª pregunta - ¿Cómo sabe el sistema de qué procesos debe descargar la dll?

Pregunta 2 - ¿Cómo puedo encontrar el punto de entrada sin cargar la dll?


Ahora, esencialmente. La dll se carga y descarga durante el regsvr para su correcto registro. Y, por supuesto, esto no tiene ningún efecto en la descarga de otros procesos.

No intentes parecer más estúpido de lo que eres. Sin embargo, puedes leer el maná.

Si la biblioteca SIEMPRE se ha descargado, ¿por qué "mi" llamada a FreeLibrary según tú "no funciona en muchos casos"? ¿Qué daño puede causar una llamada extra a FreeLibrary en un bloque deinit()? Tal vez su llamada a FreeLibrary() bloquee de alguna manera la liberación de la biblioteca, o qué? Tío kool hacker, y uno descarado en eso.

Es evidente. Además de la descarga de la dll, la implementación de la desinicialización del indicador (experto) puede ser cualquier cosa directamente relacionada con ella, lo que convierte la liberación no autorizada de la dll en un hack, que a su vez no garantiza el correcto funcionamiento del terminal.


>> Así que, buena suerte, sigue intentándolo.

2Todos: no piensen en contratarlo como administrador.

Razón de la queja: