2011-05-20 11 views
5

Dado que estoy ejecutando un archivo EXE (aplicación D2006) en una máquina en la red, ¿cómo puedo obtener la ruta a la carpeta commondocs en esa máquina? , dado que el EXE puede haber sido invocado desde un atajo UNC o un atajo de letra de unidad mapeada, y la plataforma de la máquina remota no es necesariamente conocida (pero será> = WinXP)?Cómo encontrar el nombre de la carpeta de documentos comunes en una máquina de red

La situación es donde el cliente tiene una gran cantidad de máquinas dispersas, y no se les puede molestar instalar mi aplicación en todas las PC. Entonces lo que hacen es instalar el ejecutable en algún lugar de la red y darle a todos un acceso directo a eso. Esto ya les parece bien y no hay problemas allí.

A petición suya, hice que la aplicación lea la configuración de un archivo INI colocado en la misma carpeta que el ejecutable. Solo puedo suponer que han configurado las cosas para que todos los usuarios puedan escribir en esa carpeta para poder guardar el archivo INI.

Sin embargo, deseo cambiarlo para que el archivo INI se lea y guarde en algún lugar del árbol de carpetas de commondocs en la máquina remota, para que no necesiten proporcionar acceso de escritura a la carpeta Archivos de programa.

+1

Dudo que pueda, porque creo que debe iniciar sesión en la máquina para obtener esta información. – Misha

+0

Hola @Misha. Más detalles agregados a la pregunta - gracias R – rossmcm

+0

"La situación es donde el cliente tiene una gran cantidad de máquinas dispersas, y no se les puede molestar instalar mi aplicación en todas las PC". Si pueden administrarlos, también pueden administrar el software de ellos. Si no pueden gestionarlos, bueno, tienen un problema ...;) –

Respuesta

10

La máquina que es ejecutando su programa es la única máquina a la que tiene acceso. La máquina donde su programa es almacenados es irrelevante. Es solo una unidad de disco. Puede que no esté ejecutando Windows. Incluso podría ser un NAS que apenas ejecuta nada en absoluto.

Si el cliente desea que la carpeta de documentos comunes del servidor de archivos actúe como la carpeta de documentos comunes para todos en todos los sistemas cliente, obtenga sysadmin para configurar una carpeta compartida en el servidor y luego configure the clients to use that remote folder as their common-documents folder. No se requiere programación especial de su parte para eso.

Para obtener la carpeta de documentos comunes de la máquina en la que se está ejecutando su programa, puede llamar a cualquiera de las diversas funciones de la API, incluido ShGetFolderPath. El valor CSIDL que necesita es CSIDL_COMMON_DOCUMENTS. Si llama al SHGetKnownFolderPath en su lugar, use FOLDERID_PublicDocuments.

+0

Gracias @Rob. El problema es que el cliente no quiere tener nada que ver con las estaciones de trabajo. Todo lo que quiere hacer es instalar la aplicación en el servidor. Si la instalación de la aplicación creó '{pf} \ MyApp' para el archivo ejecutable y' {pf} \ MyApp \ Application Data' para el archivo INI (y le dio a la carpeta '{pf} \ MyApp \ Application Data' todos" modificar "acceso", ¿no funcionaría eso? Podría averiguar dónde estaba el archivo INI desde la ruta al ejecutable, todos tendrían acceso de lectura y escritura a la carpeta de archivos INI, y nadie podría modificar ninguna otra carpeta '{pf}'. – rossmcm

+0

Sí, eso suena como una buena alternativa. Buena idea. –

Cuestiones relacionadas