una permisos escritura dar crear con carpeta c#

escritura - dar permisos a una carpeta c#



Permitir permiso de acceso para escribir en archivos de programa de Windows 7 (13)

Agregar nuevo elemento en el proyecto: Application Manifest y guardarlo.

Ahora abra este archivo y busque <requestExecutionLevel> . Debe establecerse en asInvoker .

highestAvailable a la más highestAvailable . Ahora, al ejecutar la aplicación, aparecerá un mensaje solicitando permiso. Haga clic en yes !

Eso es todo :) ahora puede escribir y leer desde el sistema32 o cualquier otro archivo que requiera el derecho de administrador

Puede verificar su aplicación por sigcheck .

sigcheck.exe -m yourapp.exe

Y en la comprobación de salida para elemento requiredExecutionLevel.

Mi aplicación arroja errores de "Acceso denegado" al escribir archivos temporales en el directorio de instalación donde reside el ejecutable. Sin embargo, funciona perfectamente bien en Windows XP. ¿Cómo proporcionar derechos de acceso al directorio Archivos de programa en Windows 7?

EDITAR: ¿Cómo hacer que el programa solicite al usuario elevar los derechos? (Ej. programa ejecutable con derechos de administrador completos)


Creo que hay una solución alternativa para todos estos problemas ... Haga una aplicación de dos niveles. Como se dijo anteriormente ...

1) Iniciador que lanzará otra aplicación principal utilizando un código como (VB)

Call ShellExecute(hwnd, "runas", App.Path & "/MainApp.exe", 0, 0, vbNormalFocus)

2) Aplicación principal, que está escribiendo en áreas protegidas, es decir, en la carpeta Archivos de programa

Lo he intentado con éxito con Windows 7

También estoy desarrollando una aplicación que tiene la función de actualización en línea. Pero no funciona en Vista / W7 ..

Estoy de acuerdo con otras personas sobre las políticas y prácticas estándar de Microsoft.

Pero mi pregunta es ... 1) Cómo aplicar la actualización a una aplicación existente, que probablemente siempre permanezca en la carpeta Archivos de programa. 2) Puede haber alguna forma de hacer esto, de lo contrario, ¿cómo funciona el actualizador de Goolge, el actualizador de antivirus o cualquier actualizador de software?

Necesito respuesta a mis preguntas .....: o

Prof. Rajendra Khope (MIT, Pune, India)


Estaba buscando respuestas. Sólo encontré uno

Ninguno de estos funciona para mí. No estoy intentando escribir archivos temporales, a menos que esté definido como archivos que no son del sistema. Aunque soy designado como administrador en mi perfil de usuario, con todos los derechos de administrador indicados en el UAC, no puedo escribir en archivos de programa o ventanas. Esto es muy irritante.

Intento guardar una imagen encontrada en línea directamente en la carpeta windows / web / wallpaper y no me deja. En su lugar, debo guardarlo en mi escritorio (RECHAZO navegar a "mis documentos / imágenes / etc", ya que me niego a USAR tales carpetas, tengo mi propio árbol de directorios gracias) luego, desde el escritorio, córtelos y péguelos a la carpeta windows / web / wallpaper. ¿Y me estás diciendo que debería hacer eso y sonreír? Como usuario administrador, DEBERÍA poder guardar directamente en su carpeta de destino. Mis permisos en propiedades / seguridad del disco y en propiedades / seguridad del directorio dicen que puedo escribir, pero no puedo. No para archivos de programa, archivos de programa (86) y ventanas.

¿Qué hay de guardar un archivo que acabo de modificar para un juego en la carpeta Archivos de programa (86) (nombre del juego)? No me deja. Abro el archivo para modificarlo, no puedo guardarlo sin primero guardarlo en el escritorio, etc., como antes, o abrir el programa que se usa para modificar el archivo primero como administrador, lo que significa primero navegar todo el camino hacia otro parte del árbol de directorios donde almaceno esos programas mod de usuario, luego dentro del programa selecciono abrir archivo y navegar nuevamente al archivo en el que podría haber hecho clic para modificar en primer lugar desde mi carpeta de proyectos, solo para descubrir que esto ganó ¡Tampoco trabajes! Guarda el archivo, pero el archivo no puede ser localizado. Está ahí, pero invisible. La única solución es guardar en el escritorio como arriba.

No debería tener que hacer todo esto como usuario administrador. Sin embargo, si utilizo la verdadera cuenta de administrador, todo funciona bien. Pero no quiero usar la cuenta de administrador real. Quiero usar una cuenta de usuario con derechos de administrador. Dice que tengo derechos de administrador, pero no los tengo.

Y, finalmente, me niego a almacenar mis portátiles en% appdata%. No es así como deseo navegar a través de mi árbol de directorios. Mis instalaciones personales que uso como portátiles se almacenan en el directorio que creo como una preferencia de navegación.

Entonces, aquí está la respuesta probada y verdadera que he encontrado:

Por lo que he visto hasta ahora ... a menos que uno use la cuenta de administrador real, estos permisos simplemente nunca estarán realmente disponibles para ningún otro usuario con privilegios de administrador en los sistemas operativos Windows Vista y Windows 7. Si bien era sencillo establecer los privilegios de administrador en Windows XP, las versiones posteriores han eliminado esto para todos, excepto para aquellos que pueden hackear cómodamente.


Estoy trabajando en un programa que guarda sus datos correctamente en% APPDATA%, pero a veces, hay configuraciones de todo el sistema que afectan a todos los usuarios. Entonces, en estas situaciones, TIENE que escribir en el directorio de instalación de programas.

Y hasta donde he leído, es imposible obtener temporalmente acceso de escritura a un directorio. Solo puede ejecutar la aplicación completa como administrador (que debería estar fuera de la cuestión) o no podrá guardar ese archivo. (todo o nada)

Supongo que solo escribiré el archivo en% APPDATA% y lanzaré un programa externo que copia el archivo en la carpeta de instalación y tendré ESO programa que exige privilegios de administrador ... idea tonta, pero parece ser la única solución práctica ...


Mientras que M $ "mejores prácticas" es no escribir datos en la carpeta% programfiles%; A veces lo hago No creo que sea prudente escribir archivos temporales en una carpeta de este tipo; como la variable de entorno TEMP podría, por ejemplo, apuntar a una buena unidad RAM, rápida.

Sin embargo, no me gusta escribir datos en% APPDATA%. Si Windows se desordena tanto que uno necesita, por ejemplo, limpiarlo y reinstalarlo completamente, tal vez en una unidad diferente, es posible que pierda todas las configuraciones de casi todos sus programas. Lo sé. Lo he hecho muchas veces. Si está almacenado en% programfiles%, 1) no se pierde si, por ejemplo, tengo que reinstalar Windows en otra unidad, ya que un usuario puede simplemente ejecutar el programa desde su directorio, 2) lo hace portátil y 3) mantiene los archivos del programa juntos.

Obtuve acceso de escritura al tener mi instalador, Inno Setup, crear un archivo vacío para mi archivo INI, y le di la configuración de modificación de usuarios en la sección [Archivos]. Ahora puedo escribirlo a voluntad.


No puedo estar de acuerdo con los argumentos, que es mejor escribir todos los archivos en otros directorios, por ejemplo,% APPDATA%, es solo que no puede evitarlo, si desea evitar ejecutar la aplicación como administrador en Windows 7.

Sería mucho más limpio mantener todos los datos específicos de la aplicación (por ejemplo, los archivos ini) en la misma carpeta que la aplicación (o en las subcarpetas) para acelerar los datos en todo el disco (% APPDATA%, registro y quién sabe dónde más) . Esto es solo una idea de Microsoft de programación limpia. Por supuesto, necesita un limpiador de registro, un limpiador de disco, un limpiador de archivos temporal, ... en lugar de una práctica muy limpia de e +: eliminar la carpeta de la aplicación elimina todos los datos específicos de la aplicación (por ejemplo, los datos de usuario, que normalmente se encuentran en Mis documentos). .

En mis programas, preferiría tener archivos ini en el directorio de aplicaciones, sin embargo, no los tengo allí solo porque no puedo tenerlos allí (en Windows).


No se puede hacer que una aplicación .Net aumente sus propios derechos. Simplemente no está permitido. Lo mejor que puedes hacer es especificar derechos elevados cuando engendras otro proceso. En este caso tendrías un lanzamiento de aplicación en dos etapas.

La etapa 1 no hace nada más que preparar un engendro elevado utilizando el objeto System.Diagnostics.ProcessStartInfo y la llamada Start ().

La etapa 2 es la aplicación que se ejecuta en un estado elevado.

Como se mencionó anteriormente, sin embargo, rara vez quieres hacer esto. Y ciertamente no quiere hacerlo solo para poder escribir archivos temporales en% programfiles%. Use este método solo cuando necesite realizar acciones administrativas como inicio / parada del servicio, etc. Escriba sus archivos temporales en un lugar mejor, como se indica en otras respuestas aquí.


Opciones que se me ocurren:

  • Ejecute la aplicación completa como administrador completo. usando UAC
  • Ejecute un subproceso como administrador completo solo para aquellas cosas que necesitan acceso
  • Escribir archivos temporales en otro lugar.

Otra forma sería detener UAC y luego reiniciarlo. Crea un archivo CMD con el siguiente código;

Rem Stop UAC% windir% / System32 / reg.exe AGREGAR HKLM / SOFTWARE / Microsoft / Windows / CurrentVersion / Policies / System / v EnableLUA / t REG_DWORD / d 0 / f rem forzar reinicio Iniciar ShutDown / R / F / T 30

Deberá hacer clic derecho en el archivo CMD y usar Ejecutar como administrador. una vez que haya terminado lo que está haciendo, reinicie UAC con el siguiente código (no es necesario que use ejecutar como administrador esta vez);

% windir% / System32 / reg.exe AGREGAR HKLM / SOFTWARE / Microsoft / Windows / CurrentVersion / Policies / System / v EnableLUA / t REG_DWORD / d 1 / f

reinicio forzado reinicio Inicio apagado / R / F / T 30

La parte negativa de usar este método es hacer clic con el botón derecho y usar Ejecutar como administrador para cerrar el UAC y usted debe reiniciar para que surta efecto.

Por cierto, hay varias razones por las que necesitaría escribir en las áreas prohibidas ... lo primero que viene a la mente sería ejecutar un archivo por lotes para agregar host para evitar que su navegador vaya a sitios dudosos o para copiar claves de licencia en un instalación silenciosa.


Sería mejor crear una carpeta llamada "c: / programable en la que se puede escribir /" y poner tu aplicación debajo de esa. De esta manera se puede evitar una jungla de c-carpetas bajas.

La compensación subyacente es la seguridad frente a la facilidad de uso. Si sabes lo que estás haciendo, quieres ser un dios en tu PC. Si debe mantener sistemas saludables para su sociedad anarquista local, es posible que desee agregar algo de seguridad.


Si tiene un programa de este tipo, simplemente instálelo en C:/ , no en Archivos de programa. Tuve muchos problemas cuando estaba instalando Android SDK. Mi problema se resolvió instalando en C:/ .


Su programa no debe escribir archivos temporales (o cualquier otra cosa) en el directorio del programa. Cualquier programa debe usar% TEMP% para archivos temporales y% APPDATA% para datos de aplicación específicos del usuario. Esto ha sido cierto desde Windows 2000 / XP, por lo que debe cambiar su aplicación.

El problema no es Windows 7.

Puede solicitar la ruta de la carpeta appdata:

string dir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

o para la ruta TEMP

string dir = Path.GetTempPath()


Su programa tiene que ejecutarse con derechos administrativos. No puede hacer esto automáticamente con el código, pero puede solicitar al usuario (en código) que aumente los derechos de su programa mientras se ejecuta. Hay un wiki sobre cómo hacer esto. Alternativamente, cualquier programa puede ejecutarse como administrador haciendo clic con el botón derecho en su icono y haciendo clic en "Ejecutar como administrador".

Sin embargo, no sugeriría hacer esto. Sería mejor usar algo como esto:

Environment.GetFolderPath(SpecialFolder.ApplicationData);

para obtener la ruta de la carpeta AppData y crear una carpeta allí para su aplicación. Luego ponga los archivos temporales allí.