Sto creando un'attività MSBuild che leggerà il registro per una chiave di registro specifica. Se scrivo la stessa riga di codice (vedi sotto) in un'applicazione console, restituisce il risultato previsto, ma quando si trova all'interno dell'attività MSBuild, non restituisce nulla.Come si legge un valore di registro utilizzando un'attività msbuild personalizzata?
Return Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Setup\", "SQLPath", Nothing)
mi aspetterei che il codice di cui sopra per tornare Nothing
se la coppia chiave/valore non esiste, e restituire il valore se esiste. Sto ottenendo Nothing
quando viene eseguita l'attività MSBuild. C'è qualche attributo che devo applicare alla funzione Execute dell'attività di MSBuild per dirgli che ha bisogno di leggere il registro?
EDIT:
Qui è quanto viene avviato dal compito MSBuild:
Return Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Setup\", "SQLPath", Nothing)
ho credere questo per essere causato dalla Registry Redirector sulla mia macchina Vista x64 in esecuzione MSBuild a 32 bit. C'è un modo in cui puoi dire all'attività personalizzata di MSBuild (scritta in VB .Net) di cercare in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Setup\
quindi solo se non esiste nulla allora guarda in HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Setup\
?
Grazie,
Scott Blu
hai provato uno strumento come RegMon per assicurarti di leggere la chiave di registro corretta quando viene colpito da MSBuild? Potrebbero esserci dei munging a 32-bit/64-bit? –
Buon pensiero, vedrò quello ... – Scott
Quindi, 'RegMon' è sostituito da' Process Monitor' e segnala che quando uso l'applicazione console per leggere il registro è una lettura di successo via TestingRegistry. exe (nome del programma). Ma quando eseguo l'attività, utilizza show devenv.exe come applicazione chiamante e sta effettivamente tentando di aprire questa chiave: 'HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ MSSQLServer \ Setup' e ottenere un errore' NAME NOT FOUND'. Perché dovrebbe aggiungere un elemento 'Wow6432Node' nel percorso? – Scott