none
Registro do Windows (Área de trabalho remota) RRS feed

  • Pergunta

  • Boa tarde pessoal.

    Estou tentando alterar o registo do windows para habilitar "Área de Trabalho Remota" automaticamente, o código abaixo deu certo, mas apenas quando estou debugando a aplicação.

    RegistryKey key = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, System.Environment.MachineName); 
    key = key.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Terminal Server", true);
    key.SetValue("fDenyTSConnections", 0, RegistryValueKind.DWord);

    Achei que fosse algo parecido com direitos de usuário, embora não retorne nenhum tipo de erro no try{}catch{}, então continue pesquisando e achei o código abaixo(alterei apenas o caminho e chave que quero alterar)

    Microsoft.Win32.RegistryKey key = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, System.Environment.MachineName);
    string user = Environment.UserDomainName + "\\" + Environment.UserName;
    RegistrySecurity rs = new RegistrySecurity();
    rs.AddAccessRule(new RegistryAccessRule(user, RegistryRights.WriteKey, InheritanceFlags.None, PropagationFlags.None, AccessControlType.Allow));
    key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Terminal Server", true);
    key.SetAccessControl(rs);
    key.SetValue("fDenyTSConnections", 0, RegistryValueKind.DWord);

    Porém o problema persiste funcionando apenas debugando.

    Alguém tem alguma idéia?

    Obrigado.


    Aprendendo C#, SQL Server

    terça-feira, 5 de junho de 2012 21:11

Respostas

  • Problema resolvido!
    Vou colocar a solução e a besteira que fiz para não cometerem o mesmo erro.

    Bem após achar o código abaixo e alterar 2 coisas fu....  com o registro do windows...hehehe

    RegistryKey key = Registry.LocalMachine;
    RegistrySecurity rs = new RegistrySecurity();
    rs = key.GetAccessControl();
    string user = Environment.UserDomainName + "\\" + Environment.UserName;
    rs.AddAccessRule(new RegistryAccessRule(user, RegistryRights.ReadKey, InheritanceFlags.None, PropagationFlags.None, AccessControlType.Allow));
    key.SetAccessControl(rs);
    RegistryKey key2 = key.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Terminal Server", RegistryKeyPermissionCheck.ReadSubTree, RegistryRights.ReadPermissions);
    key2.SetValue("fDenyTSConnections", 0, RegistryValueKind.DWord);

    Observe a penultima linha, eu alterei as 2 últimas opções para:

    RegistryKey key2 = key.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Terminal Server", RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.SetValue);

    Mas ATENÇÃO, não faça isso.... (risos)
    Isso fez com que eu utilizasse a Restauração do Windows, então, VIVA a Restauração do Windows.
    Não vou me aprofundar pois além de não saber muita coisa isto não vem ao caso, pelo menos por enquanto.

    O QUE REALMENTE INTERESSA.

     Microsoft.Win32.RegistryKey key = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, System.Environment.MachineName);
    string user = Environment.UserDomainName + "\\" + Environment.UserName;
    RegistrySecurity rs = new RegistrySecurity();
    rs.AddAccessRule(new RegistryAccessRule(user, RegistryRights.WriteKey, InheritanceFlags.None, PropagationFlags.None, AccessControlType.Allow));
    key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Terminal Server", true);
    key.SetAccessControl(rs);
    key.SetValue("fDenyTSConnections", 0, RegistryValueKind.DWord);

    Já havia testado porém não prestei atenção em OpenSubKey que estava com o segundo parâmentro como false e alterei para true para permitir a alteração do mesmo.

    Obrigado pessoal.


    Aprendendo C#, SQL Server

    • Marcado como Resposta Carlos Abreu Jr terça-feira, 5 de junho de 2012 23:53
    terça-feira, 5 de junho de 2012 23:50