ser ruta registro permisos modificar hklm escribir error eliminar desde denegado dar como claves clave bloqueada administrador acceso delphi registry

delphi - ruta - ¿Dónde almacenar la configuración del programa en lugar de HKEY_LOCAL_MACHINE?



hklm (10)

¿Se puede crear un archivo .msi que se pueda usar para enviar la configuración del registro a través de la política de grupo?

Tengo algunas configuraciones de programa que están almacenadas actualmente en HKEY_LOCAL_MACHINE. Debido a Vista y usuarios bloqueados, algunos usuarios no tienen permiso para HKEY_LOCAL_MACHINE, y esos valores tampoco pertenecen realmente a HKEY_LOCAL_USER (tiene que ser el mismo para todos los usuarios), ¿cuál es la mejor ubicación alternativa para almacenarlos?

La mayoría de las configuraciones ya están almacenadas en el DB, pero hay algunas que el programa necesita conocer antes de conectarse al DB. Idealmente, me gustaría una forma de implementar esto sin necesidad de verificar qué sistema operativo se está ejecutando.

Esto es para una aplicación de escritorio escrita en Delphi.


Podría ser un buen lugar en el registro para ponerlos, no sé, pero ¿por qué no simplemente agregar un archivo ini en C: / Documents and Settings / All Users / Application Data / yourApp


Deberías poner:

  • configuración personal (como posición de ventana y preferencias menores) en HKEY_CURRENT_USER en el registro o en la carpeta CSIDL_APPDATA o CSIDL_LOCAL_APPDATA ;
  • configuración de aplicación importante (como una ruta fija que no debería ser modificada por los usuarios) en HKEY_LOCAL_MACHINE en el registro o en la carpeta de la aplicación. Configúrelos en el momento de la instalación, cuando los privilegios de administrador estén disponibles;
  • datos compartidos (datos que todos sus usuarios deben leer y escribir, como una base de datos simple) en la carpeta CSIDL_COMMON_APPDATA .

Use SHGetFolderPath para encontrar la ubicación de las carpetas CSIDL_* .

Dependiendo de sus necesidades, le gustaría implementar las tres opciones dadas a la vez. No habría nada de malo en eso.


Guarda cosas en% APPDATA% o% LOCALAPPDATA%


Mencionó HKEY_LOCAL_USER, pero no veo eso en el nivel superior en el Registro. Supongo que debe referirse a HKEY_CURRENT_USER.

Puse mi configuración de usuario en HKEY_CURRENT_USER / Software / my-program. Me parece que esto funciona en Vista sin problema.

Pero como dice que tiene configuraciones que se aplican a todos los usuarios que no desea bajo HKEY_CURRENT_USER, puede intentar:

HKEY_USERS / .DEFAULT / Software / tu-programa

o

HKEY_CURRENT_CONFIG / Software / your-program

Me temo que no uso ninguna de esas ubicaciones, así que no puedo decirte si funcionan con Vista o no, pero sí veo que algunos proveedores de software han agregado entradas de registro allí.


Siempre hay archivos INI anticuados. Son más portátiles que las configuraciones de registro. Otra opción sería un archivo XML.

No los guarde en el directorio Archivos de programa, aunque a Vista no le gustará eso.


Pregúntate si tu configuración es realmente para todos los usuarios. ¿Es realmente para todos los usuarios?

Piensa detenidamente en esta pregunta:

¿Cómo funcionaba el software en Windows XP como usuario estándar?

  • ¿El software simplemente se bloqueó?
  • Estaba configurando la opción deshabilitada?
  • ¿Les dijiste a tus clientes que tenían que presentarse como administradores y que si se negaban, no lo harías?

Porque si su software requiere absolutamente que sea un administrador, simplemente agregue el manifiesto al ejecutable diciendo que necesita ejecutarse como administrador:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="IsUserAdmin" type="win32"/> <description>Description of your application</description> <!-- Identify the application security requirements. --> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </assembly>

Y listo, eres un administrador.

Pero no creo que realmente necesites ser un administrador. La única vez que necesita una configuración de máquina local es si va a tener usuarios de múltiples inicios de sesión o sesiones usando el software. Si realmente es algo que se aplica a todos los usuarios, ¿no debería el programa de instalación haberlo configurado?

Tuvimos la misma pregunta aquí. Un sistema de vigilancia necesita configurar qué dispositivo de captura usará el software. Podría decirse que todos los operadores de vigilancia utilizarán el mismo dispositivo de captura, por lo que una vez que lo elija, esa configuración será global para todos los operadores. Pero eso no es cierto en la práctica. Lo más probable es que haya solo un dispositivo de captura, y es el que usamos. Si hay más de uno, entonces el usuario simplemente puede elegir otro dispositivo.

Pero hay algunas maneras de manejar esto

i) Tener la configuración guardada en el registro, y hacer que el programa de instalación configure la ACL en la clave otorgue a todos los usuarios control total .

ii) Tener la configuración guardada en

% APPDATA% / Surveillance / settings.ini

archivo. Haga que el programa de instalación cree el archivo de configuración y ACL para permitir que todos los usuarios tengan Control total

iii) Almacene la configuración en una de las claves de registro o archivo ini antes mencionadas, y use

para agregar el Escudo UAC a su botón Guardar / Aceptar / Aplicar . Cuando el usuario presiona el botón, reinicia su aplicación de forma elevada (usando RunAsAdmin ), pasando parámetros de línea de comando que indican lo que desea cambiar.

iv) Haga lo mismo que 3, pero hágalo antes de que puedan ingresar a la pantalla que se utiliza para editar los valores.

v) Haz lo mismo que 4, pero los valores inicialmente solo son de lectura, y si quieren cambiarlos, tienen que elevarlos.

vi) Deshabilitar las opciones si el usuario se está ejecutando como un usuario estándar, y si desean cambiarlas: haga clic con el botón derecho en el ejecutable y seleccione

Ejecutar como administrador

Si esta es una opción que un usuario puede cambiar cuando lo desea (cuando estaba ejecutando en Windows XP y el usuario era un administrador), entonces parece que el usuario puede editar el valor a voluntad.

En este caso, puede dejar que el usuario escriba el nombre del servidor, como se les permitió hacer antes. Si el usuario tiene permiso para escribir en HKLM, guarde la opción allí. De lo contrario, guárdelo en HKCU. Al leer qué servidor usar, comience con HKCU y muévase a HKLM si el valor HKCU no está allí.


Leí todas las respuestas aquí y otras cosas y la respuesta parece ser ... ¡No use el registro! ¿Es esto realmente lo que Microsoft quiere que hagamos con los datos de configuración del programa que se aplican a todos los usuarios?


Volver a usar archivos ini: tenga en cuenta que parece haber un límite de 2048 byte en los elementos.

Me he deshecho de esto debido a esto, la información de licencia codificada flotando alrededor del límite (entonces desconocido) y algo que siempre parecía funcionar rompiendo "misteriosamente" cuando pasan ...


Lo que @uli dijo, con una excepción.

Las configuraciones que nunca cambian o que solo deben ser modificadas por un administrador pueden --sea, incluso-- guardarse en la misma carpeta que la aplicación para ayudar a evitar manipulaciones.

La información de conexión para una base de datos suena como el tipo de cosas que no deberían cambiarse sin la intervención del administrador. Por lo tanto, en este caso, la carpeta de la aplicación podría estar bien.