Jump to content
smokada

C# 64 bits

Recommended Posts

smokada

boas, ando aqui com um micro projecto que consiste em colocar um user a logar automaticamente na conta com pass no windows.

Ora em 32 bits funciona muito bem, mas em 64 bits não sei porque ao adicionar o valor ao registo vai para outro lado.

Vejamos:

em 32 bits esta a ir para o sitio certo

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]

mas em 64 bits vai para

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Winlogon]

o código usado é o seguinte

using Microsoft.Win32; 

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
            textBox1.Text = Environment.UserName;
            try
            {
                string MyKeyName = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon";
                string MyValueName = "AutoAdminLogon";
                object MyObject = null;
                string MyValue = "";

                //Registry.GetValue returns an object:
                MyObject = Registry.GetValue(MyKeyName, MyValueName, null);

                if (MyObject == null)
                {
                //Get the string value of the object returned:
                MyValue = MyObject.ToString();

                    button1.Enabled = false;
                }
                else
                {
                    if ((Convert.ToString(MyObject) == "0"))
                    {
                        button1.Enabled = true;
                        button2.Enabled = false;
                    }
                    else
                    button2.Enabled = false;
                    button1.Enabled = true;
                }
                }
                catch (Exception MyError)
                {
                MessageBox.Show("Erro: " + MyError.Message);
                }




      
        }

        private void Form1_Load(object sender, EventArgs e)
        {
           
        }

       private void button1_Click(object sender, EventArgs e)
        {

            RegistryKey myKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon", true);

            myKey.SetValue("AutoAdminLogon", "1", RegistryValueKind.String);
            
           RegistryKey myKey2 = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon", true);

           myKey2.SetValue("DefaultPassword", textBox2.Text, RegistryValueKind.String);

            RegistryKey myKey3 = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon", true);

            myKey3.SetValue("DefaultUsername", textBox1.Text, RegistryValueKind.String);
           button1.Enabled = false;
           button2.Enabled = true;

        }

       private void button2_Click(object sender, EventArgs e)
       {
           RegistryKey myKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon", true);

           myKey.DeleteValue("AutoAdminLogon");

           RegistryKey myKey2 = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon", true);

           myKey2.DeleteValue("DefaultPassword");

           RegistryKey myKey3 = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon", true);

           myKey3.DeleteValue("DefaultUsername");
           button1.Enabled = true;
           button2.Enabled = false;
       }

       private void textBox2_Click(object sender, EventArgs e)
       {
           textBox2.Text = "";

       }

       private void textBox2_DoubleClick(object sender, EventArgs e)
       {
           if (textBox2.Text == "")
           {
               textBox2.Text = "password";
           }
       }

       private void Form1_MouseLeave(object sender, EventArgs e)
       {
           if (textBox2.Text == "")
           {
               textBox2.Text = "Password";
           }
       }

       

       

       

       

       

       
    }
}

Share this post


Link to post
Share on other sites
Rechousa

Olá,

Para ires buscar o utilizador que está autenticado... Podes fazer da seguinte maneira:

// Retorna algo do género: DOMINIO\username
Console.WriteLine(WindowsIdentity.GetCurrent().Name);

Tens mesmo de ir ao Registry?


Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Share this post


Link to post
Share on other sites
Rechousa

Voltando à questão do Registry:

Estás a compilar a tua aplicação em que modo? x86 ou Any CPU?

Segundo o artigo abaixo, se compilares em modo x86 e correres em máquinas 64 bits, o teu programa vai ser executado em WowMode.

Fonte:

http://www.codeproject.com/Articles/51326/Net-Compilation-registry-accessing-and-application.aspx?msg=3426476#xx3426476xx,

Experimenta compilar em modo Any CPU e executar em x86 e x64.

Se possível, depois deixa aqui o feedback :)


Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Share this post


Link to post
Share on other sites
smokada

obrigado pelo feedback, em que menu é que vejo isso do anycpu? é que mais uma vez eu ando a começar a programar com base em pesquisas na net... não tenho bases  :)

semttulodno.png

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.