Pregunta

Estoy llamando a CreateFile () para crear un archivo en el directorio de datos del programa. Estoy usando SHGetSpecialFolderPath () para obtener el nombre del directorio.

Tengo un usuario con Vista para el que CreateFile () está devolviendo el error 5 (Acceso denegado). Me ayudaría si supiera dónde CreateFile () estaba intentando crear el archivo para que podamos verificar los permisos de su carpeta. El problema con Vista (UAC) es que no está intentando crear el archivo en el directorio que pasé. También podría estar en un directorio de VirtualStore. Una fuente de confusión adicional es que este usuario es alemán y, aunque SHGetSpecialFolderPath () está devolviendo " C: \ Datos de programa \ blah blah " como camino, no creo que en realidad sea donde está el camino. Creo que German Vista usa la palabra alemana para " Datos del programa " ;. Me gustaría poder decirle al usuario " Esta es la ruta exacta en la que estamos tratando de crear el archivo. Verifique sus permisos en esta carpeta. & Quot;

Sé que puede obtener una ruta desde un identificador de archivo abierto, pero en este caso, el CreateFile () está fallando, así que no tengo un identificador abierto. ¿Cómo puedo hacer que Vista me diga la ruta real donde intenta crear el archivo?

¿Fue útil?

Solución

Arranque el Monitor de proceso y observe lo que hace: http://technet.microsoft.com/en-us/sysinternals/bb896645. aspx

Otros consejos

Si con UAC las rutas utilizadas no son las que usted desea, la redirección está en efecto. Para asegurarse de que no se produce la redirección, agregue un manifest a su aplicación, lo que le indica a Vista que su aplicación está correctamente codificada y tiene conocimiento de las restricciones de acceso (es decir, no escribe a, por ejemplo, HKLM o la carpeta de programas si su aplicación no necesita privilegios de administrador para ejecutarse).

Pero tu aplicación debería poder escribir en la carpeta APPDATA (si eso es lo que realmente usas).

Asegúrese de que está utilizando CSIDL_APPDATA y no CSIDL_COMMON_APPDATA (a este último solo se puede acceder con privilegios de administrador).

Para encontrar la ruta real (la que usted esperaría), diga al usuario que escriba% APPDATA% en la barra del explorador (o presione Windows + R, luego escriba% APPDATA%, ingrese). Esto abrirá el explorador en esa carpeta.

Según tengo entendido, VistaData utiliza ProgramData para escribir archivos que intentaban escribirse en C: \ Archivos de programa, pero falló, ya que, a menos que esté ejecutando la aplicación como administrador, no puede escribir dentro de los archivos de programa. Tal vez debería intentar guardar sus archivos en la carpeta AppData bajo el usuario actual.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top