¿Cuáles son las llamadas, de bajo nivel del núcleo del sistema operativo & exactos que se ejecutan cuando un usuario haga doble clic o selecciona un archivo y pulsa la tecla de Enter
desde el Explorador de Windows?
detalles
Esto puede parecer una pregunta bastante extraño, pero tengo curiosidad por los detalles muy "meollo" de abrir un archivo desde el Explorador de Windows.
En concreto, lo que me gustaría saber, son los de bajo nivel del núcleo del sistema operativo & llamadas exactas que se están ejecutando cuando un usuario haga doble clic o selecciona un archivo y pulsa la tecla de Enter
desde el Explorador de Windows.
La razón por la que pregunto es porque tengo una aplicación que permite a los usuarios navegar y buscar archivos basados en metadatos almacenados en una base de datos. Cuando un usuario hace clic en el botón Open
que he proporcionado, comienzo un proceso donde el archivo raíz es la ruta al archivo que se ha seleccionado. Además, vale la pena mencionar que estos archivos están en un recurso compartido de red.
Esto ha funcionado durante años, sin embargo, recientemente mi compañía ha migrado a un nuevo servidor de Active Directory y ahora la aplicación se interrumpe para un pequeño grupo de usuarios (1-2%). Lo realmente extraño es que estos los usuarios no pueden abrir este archivo desde mi aplicación, pero pueden buscar la ubicación y abrirlo desde el Explorador de Windows. Cuando mi aplicación intenta abrir el archivo, obtiene una excepción muy genérica que indica que no se pudo encontrar el archivo.
He comprobado tres veces la ruta que está usando la aplicación (para varios archivos) y la ruta no es incorrecta. Verifiqué que mis usuarios tenían, y están, conectados a estas unidades de red antes de abrir los archivos. Todo está configurado correctamente y debería funcionar, pero mi aplicación (o System.Process
) no puede "ver" o abrir estos archivos.
¿Qué hace la aplicación Windows Explorer de manera diferente a usar System.Process
desde dentro de una aplicación?
Para aquellos que deben tener código antes de responder, aquí está el código excepcionalmente lacónico que utilizo para abrir un archivo. De nuevo, esto ha funcionado durante años y, como mejor sé, es cómo permites que Windows abra un archivo desde .Net.
//From within my Button-Click Event...
string file = e.Cell.Value.ToString();
try
{
Process p = new Process();
p.StartInfo.FileName = file;
p.StartInfo.Verb = "Open";
p.Start();
}
catch (Exception ex)
{
MessageBox.Show("A problem has occurred while trying to open the doccument."
+ "Please make sure that the file below exists and that you have permission "
+ "to view it."
+ Environment.NewLine + Environment.NewLine
+ file
+ Environment.NewLine + "---------------" + Environment.NewLine +
ex.Message
);
//ex.Message states "The system cannot find the file specified"
}
Una cosa más. Encontré this question en SO, pero no se aplica a esta pregunta. Mi aplicación simplemente intenta abrir archivos PDF y algunos archivos de dibujo de ingeniería. Nada especial, y no debería requerir acceso de administrador. Además, no creo que sea necesaria ninguna autenticación de usuario ya que la mayoría de los usuarios nunca reciben este mensaje y ya se han validado en la red al iniciar sesión y navegar a la ubicación de la red.
¿Hay algo en común entre los clientes que fallan en el nivel de la PC? ¿Están en un sistema operativo diferente de los que están trabajando? –
Es difícil de decir. Nuestra TI hizo una transición MASIVA de Windows 7 justo antes de la migración de AD. Los usuarios que recibieron nuevas cuentas de usuario y muchos usuarios que estaban listos para las actualizaciones de PC o para acercarse a su tiempo planificado, recibieron nuevas PC con Win 7. El único administrador que tiene problemas y me habla mucho, todavía está atascado. con Windows XP. Sin embargo, siempre funcionó para él en esta PC en el pasado. Le acaban de dar una nueva cuenta en el nuevo dominio AD para comenzar a usar. Hemos comprobado tres veces sus permisos. Él puede navegar a la ubicación y abrir estos archivos, pero mi aplicación no puede? – RLH
¿Solo falla solo en PDF? ¿Estás usando Acrobat? Acrobat no funciona bien con .NET. Es solo .exe que desde el exterior solo abrirá un archivo a la vez. Y si está activo algunas veces simplemente no responderá. Intentar alojar la vista en .NET es, en el mejor de los casos, problemático, y en primer lugar, se come el evento clave. – Paparazzi