Eu acho que há algo mais acontecendo aqui.
O usuário está logado ao mesmo tempo que o serviço? Em caso afirmativo, a seção do Registro pode ser bloqueada. Há alguma mensagem no log de eventos do Windows?
A razão que eu acho que o aplicativo deve ser capaz de acessar o registro HKEY_CURRENT_USER é porque eu testei isso e criei um exemplo do serviço C # Windows (código abaixo, se estiver interessado).
Os aplicativos projetados para serem executados como um serviço não devem, entretanto, armazenar suas informações em uma seção de registro HKCU. O HKLM é o local correto para configurações de aplicativos em todo o sistema.
Testes realizados
Criei uma nova conta de usuário com acesso administrativo no Windows 7. Em seguida, concedeu a ela Logon como direitos de serviço, instalei e iniciei o serviço.
Meus achados foram:
* Quando eu corri o serviço, HKCU foi carregado e capaz de ser gravado.
* Quando a colmeia já estava carregada, recebi esta mensagem no log de eventos e a seção real não foi atualizada. Em vez disso, uma seção temporária foi criada.
Windows was unable to load the registry. This problem is often caused
by insufficient memory or insufficient security rights.
DETAIL - The process cannot access the file because it is being used
by another process. for C:\Users\OtherService\ntuser.dat
Além disso, link e aqui link indica que mesmo as contas padrão do sistema têm uma seção de registro que é carregada no HKCU, embora possa ser compartilhado.
Código para o serviço de teste
public partial class ExecuterSvc : ServiceBase
{
public ExecuterSvc()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
TagRegistryHive("Tag", "Written");
}
protected override void OnStop()
{
}
public void TagRegistryHive(string KeyName, object Value)
{
try
{
// Load the hive.
var rk = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Default);
rk.SetValue(KeyName.ToUpper(), Value);
}
catch (Exception e)
{
}
}
}