Confidencial de WindowsA partes iguales

Raymond Chen

¿Alguna vez se ha preguntado por qué al desinstalar un programa, Windows® le pregunta si debería borrar un archivo que "puede hacer que otras aplicaciones dejen de funcionar correctamente"? En primer lugar, el mensaje (que aparece en la captura de pantalla) no procede de Windows, sino del desinstalador. Por lo tanto, la pregunta correcta sería: "¿Por qué el desinstalador de la aplicación muestra este cuadro de diálogo?" Éste es un excelente ejemplo de pregunta que el usuario no sabe contestar. ¿Por qué se ha llegado a esta situación tan desafortunada?

Con el fin de administrar el recuento de referencias para los archivos usados por más de una aplicación (como las bibliotecas en tiempo de ejecución de MFC, que son usadas por diferentes programas sin relación entre sí), el instalador crea una entrada en la clave del Registro SharedDLL. Esta entrada incluye el archivo y su recuento de referencias. Si ya hay una entrada para el archivo, se aumenta el recuento de referencias. Si la entrada aún no existe, el recuento de referencias se establece en uno. Por el contrario, al desinstalar el programa, el recuento de referencias disminuye y, al llegar a cero, se elimina el archivo, ya que no hay ningún programa que lo use. Al menos, así era en teoría.

¿Lo borro o no?

¿Lo borro o no?  (Hacer clic en la imagen para ampliarla)

Un problema grave con este modelo, es que asume que todo el mundo está dispuesto a jugar según las reglas. No obstante, la tentación de hacer trampas es inmensa, ya que las consecuencias no suelen penalizar al tramposo.

Por ejemplo, imagine que hay un programa que usa las bibliotecas en tiempo de ejecución de MFC y su instalador solamente las copia en el directorio del sistema sin actualizar el recuento de referencias. Al desinstalar este programa, simplemente elimina las bibliotecas. Ahora imagine qué ocurre cuando este programa intenta coexistir con un programa que sigue las reglas. Éste es el desarrollo básico de los acontecimientos:

  1. Instale el programa bueno: se instalan las bibliotecas y el recuento de referencias se establece en 1.
  2. Instale el programa malo: se instalan las bibliotecas, pero no se modifica el recuento de referencias.
  3. Desinstale el programa malo: se eliminan las bibliotecas.

El resultado de estos acontecimientos es que el programa bueno deja de funcionar porque han desaparecido las bibliotecas.

He aquí otro supuesto:

  1. Instale el programa bueno: se instalan las bibliotecas y el recuento de referencias se establece en 1.
  2. Instale el programa malo: se instalan las bibliotecas, pero no se modifica el recuento de referencias.
  3. Desinstale el programa bueno: el recuento de referencias llega a cero y se eliminan las bibliotecas.

El resultado de este supuesto es que el programa malo deja de funcionar.

Las personas que escribieron el programa bueno pensaron: "bueno, no podemos impedir que el programa malo nos fastidie, pero al menos podemos intentar no fastidiarlo a él". Por eso, cuando están a punto de eliminar un archivo, se paran y muestran un mensaje de aviso en el que dicen: "¡madre mía!, ¡madre mía!, voy a borrar un archivo, ¿vale?" Si hay por ahí algún programa malo que aún lo use, entonces ese programa malo se fastidiará. Si tiene un programa malo, debería hacer clic en No borrar". Vale, no es así literalmente, pero ya sabe a qué diálogo me refiero. Incluso el legendario Jeffrey Richter recomendó este enfoque en un artículo de Microsoft Systems Journal de 1996.

Por desgracia, al hacer esto, se le presenta al usuario una pregunta que no es capaz de responder correctamente.

Por supuesto, todos los fanáticos del control que exigen que Windows les dé la opción de invalidarlo todo deberían estar encantados con este cuadro de diálogo. Los programas de desinstaladores del mundo le ofrecen control archivo a archivo en el proceso de desinstalación. Así que tenga cuidado con lo que pide o puede acabar consiguiéndolo.

Raymond Chen, The Old New Thing, y en su libro homónimo se trata la historia de Windows y la programación Win32. Se pregunta si se llegará a una fusión nuclear mientras que él esté vivo.

© 2008 Microsoft Corporation and CMP Media, LLC. Reservados todos los derechos; queda prohibida la reproducción parcial o total sin previa autorización.