windows - tutorial - visual studio wpf
Proyecto de instalación de Visual Studio: por configuración de registro de usuario (4)
Estoy intentando mantener un proyecto de instalación en Visual Studio 2003
(sí, es una aplicación heredada). El problema que tenemos en este momento es que necesitamos escribir entradas de registro en HKCU
para cada usuario en la computadora. Deben estar en HKCU
lugar de HKLM
porque son la configuración predeterminada del usuario y cambian por usuario. Mi sensación es que
- Esto no es posible
- Esto no es algo que el instalador debería estar haciendo, sino algo que la aplicación debería estar haciendo (¿después de todo lo que sucede cuando se crea un perfil de usuario después de la instalación?).
Con esto en mente, todavía quiero cambiar lo menos posible en la aplicación, por lo que mi pregunta es, ¿ es posible agregar entradas de registro para cada usuario en un proyecto de instalación de Visual Studio 2003
?
Y, en este momento, el proyecto enumera cinco claves raíz de registro ( HKEY_CLASSES_ROOT, HKEY_CURRENT_USER
, HKEY_LOCAL_MACHINE
, HKEY_USERS
y User / Machine Hive). Realmente no sé nada sobre la clave raíz de Usuarios, y no he visto User / Machine Hive. ¿Alguien puede iluminarme sobre lo que son? Tal vez podrían resolver mi problema anterior.
Primero: Sí, esto es algo que pertenece a la Aplicación para el reson exacto que especificó: ¿Qué sucede después de que se crean nuevos perfiles de usuario? Claro, si está usando un dominio es posible tener algunas cosas puestas en el registro en la creación, pero esto no es realmente un caso de uso. La aplicación debe verificar si hay seetings y usar la configuración predeterminada si no es así.
Dicho esto, es posible cambiar las llaves de otros usuarios a través de HKEY_USERS Hive.
No tengo experiencia con el Proyecto de instalación de Visual Studio 2003, así que aquí hay un poco de código VBScript (sin ninguna relación) que podría darte una idea de dónde buscar:
const HKEY_USERS = &H80000003
strComputer = "."
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!//" & strComputer & "/root/default:StdRegProv")
strKeyPath = ""
objReg.EnumKey HKEY_USERS, strKeyPath, arrSubKeys
strKeyPath = "/Software/Microsoft/Windows/CurrentVersion/WinTrust/Trust Providers/Software Publishing"
For Each subkey In arrSubKeys
objReg.SetDWORDValue HKEY_USERS, subkey & strKeyPath, "State", 146944
Next
(Código Cortesía de Jeroen Ritmeijer )
Supongo que porque quieres configurarlo para todos los usuarios, ¿estás en algún tipo de computadora compartida, que probablemente se está ejecutando bajo un dominio?
AQUÍ HAY DRAGONES
Digamos que Joe y Jane regularmente inician sesión en la computadora, entonces cada uno tendrá ''registros''.
A continuación, instalará su aplicación, y el instalador empleará hacks gigantes y cosas desagradables para configurar los elementos en HKCU para ellos.
ENTONCES, bob vendrá e iniciará sesión (él y otras 500 personas tienen cuentas en el dominio y pueden hacerlo). Nunca ha usado esta computadora antes, por lo que no tiene registro. La primera vez que inicia sesión, Windows le crea una, pero él no tendrá su configuración.
Su aplicación se cae o se comporta de manera incorrecta, y bob se queja en voz alta sobre esos productos asquerosos de raynixon incorporados.
La respuesta correcta es simplemente tener algunas configuraciones predeterminadas en su aplicación, que pueden escribirlas en el registro si no las encuentra. Es una buena práctica general que su aplicación nunca dependa del registro, y debe crear cosas según sea necesario, para cualquier entrada de registro, no solo HKCU, de todos modos
Ya llegué a mi solución con esta entrada en MSDN (no sé cómo no pude encontrarla antes).
Usuario / Máquina Colmena
Las subclaves y los valores ingresados en esta sección se instalarán en la sección HKEY_CURRENT_USER cuando un usuario elija "Solo yo" o la sección HKEY_USERS o cuando un usuario elija "Todos" durante la instalación.
A pesar de lo que dice el artículo de MSDN sobre User / Machine Hive, no escribe en HKEY_USERS. Más bien escribe a HKCU si seleccionas Just Me y HKLM si seleccionas a todos.
Por lo tanto, mi solución será utilizar el enrutador de usuario / máquina y, a continuación, en la aplicación, comprueba si las entradas de registro están en HKCU y, en caso negativo, las copia de HKLM. Sé que probablemente esta no sea la forma más ideal de hacerlo, pero tiene la menor cantidad de cambios.