Domanda

Sto cercando di mantenere un progetto di installazione in Visual Studio 2003 (sì, è un'applicazione legacy).Il problema che abbiamo al momento è che dobbiamo scrivere le voci del registro HKCU per ogni utente del computer.Devono essere nel HKCU piuttosto che HKLM perché sono le impostazioni utente predefinite e cambiano per utente.La mia sensazione è questa

  1. Questo non è possibile
  2. Questo non è qualcosa che dovrebbe fare il programma di installazione, ma qualcosa che dovrebbe fare l'applicazione (dopo tutto cosa succede quando viene creato un profilo utente dopo l'installazione?).

Tenendo questo in mente, voglio comunque apportare modifiche il meno possibile all'applicazione, quindi la mia domanda è: è possibile aggiungere voci di registro per ogni utente in a Visual Studio 2003 progetto di installazione?

E, al momento, il progetto elenca cinque chiavi root del registro (HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, e Hive utente/macchina).Non so davvero nulla della chiave root degli utenti e non ho visto User/Machine Hive.Qualcuno può illuminarmi su cosa sono?Forse potrebbero risolvere il mio problema sopra.

È stato utile?

Soluzione

Primo:Sì, questo è qualcosa che appartiene all'Applicazione per l'esatto motivo che hai specificato:Cosa succede dopo la creazione di nuovi profili utente?Certo, se stai utilizzando un dominio è possibile inserire alcune cose nel registro al momento della creazione, ma questo non è realmente un caso d'uso.L'applicazione dovrebbe verificare se sono presenti impostazioni e in caso contrario utilizzare le impostazioni predefinite.

Detto questo, è possibile modificare le chiavi di altri utenti tramite l'hive HKEY_USERS.

Non ho esperienza con il progetto di installazione di Visual Studio 2003, quindi ecco un po' di codice VBScript (totalmente non correlato) che potrebbe darti un'idea di dove cercare:

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

(Codice per gentile concessione di Jeroen Ritmeijer)

Altri suggerimenti

Immagino che, poiché vuoi impostarlo per tutti gli utenti, ti trovi su una sorta di computer condiviso, che probabilmente è in esecuzione sotto un dominio?

ECCO I DRAGHI

Supponiamo che Joe e Jane accedano regolarmente al computer, quindi ciascuno di loro avrà dei "registri".

Quindi installerai la tua app e il programma di installazione impiegherà hack giganteschi e cose disgustose per impostare gli elementi sotto HKCU per loro.

POI, Bob arriverà e accederà (lui e altre 500 persone hanno account nel dominio e quindi possono farlo).Non ha mai usato questo computer prima, quindi non ha alcun registro.La prima volta che accede, Windows ne crea uno, ma non avrà le tue impostazioni.

La tua app poi cade o si comporta in modo errato e Bob si lamenta ad alta voce di quei prodotti scadenti della Raynixon incorporata.

La risposta corretta è avere solo alcune impostazioni predefinite nella tua app, che può scriverle nel registro se non le trova.È buona norma generale che la tua app non dipenda mai dal registro e crei elementi secondo necessità, per qualsiasi voce di registro, non solo HKCU, comunque

Nonostante ciò Articolo MSDN Archivio dell'articolo MSDN dice di User/Machine Hive, non scrive su HKEY_USERS.Piuttosto scrive su HKCU se selezioni Solo io e HKLM se selezioni tutti.

Quindi la mia soluzione sarà quella di utilizzare User/Machine Hive e quindi nell'applicazione controlla se le voci di registro sono in HKCU e, in caso contrario, le copia da HKLM.So che questo probabilmente non è il modo ideale per farlo, ma ha il minor numero di modifiche.

Sono parzialmente alla soluzione con questa voce su MSDN (non so come non sono riuscito a trovarla prima).

Hive utente/macchina
Le sottochiavi e i valori immessi in questo hive verranno installati nell'hive HKEY_CURRENT_USER quando un utente sceglie "Solo io" o l'hive HKEY_USERS o quando un utente sceglie "Tutti" durante l'installazione.

Editor del registro Archivio dell'articolo MSDN

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top