C# ve Register Sorunu

Merhaba arkadaşlar önce ilgili kodu atayım

private void RegistryKaydet()
        {
            if (regOk)
            {
                Registry.LocalMachine.CreateSubKey(@"SOFTWARE\\MyPaint");
                Registry.LocalMachine.CreateSubKey(@"SOFTWARE\\MyPaint").SetValue("SOL_RENK", pBoxRenkSol.BackColor.R.ToString() + "," + pBoxRenkSol.BackColor.G.ToString() + "," + pBoxRenkSol.BackColor.B.ToString());
                Registry.LocalMachine.CreateSubKey(@"SOFTWARE\\MyPaint").SetValue("SAG_RENK", pBoxRenkSag.BackColor.R.ToString() + "," + pBoxRenkSag.BackColor.G.ToString() + "," + pBoxRenkSag.BackColor.B.ToString());
                Registry.LocalMachine.CreateSubKey(@"SOFTWARE\\MyPaint").SetValue("ARKA_RENK", pictureBox1.BackColor.R.ToString() + "," + pictureBox1.BackColor.G.ToString() + "," + pictureBox1.BackColor.B.ToString());
                Registry.LocalMachine.CreateSubKey(@"SOFTWARE\\MyPaint").SetValue("SOL_KALEM", nmKalinlikSol.Value.ToString());
                Registry.LocalMachine.CreateSubKey(@"SOFTWARE\\MyPaint").SetValue("SAG_KALEM", nmKalinlikSag.Value.ToString());
            }
        }
        private void RegistyOku()
        {
            nmKalinlikSol.Value = Convert.ToDecimal(Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\MyPaint").GetValue("SOL_KALEM"));
            nmKalinlikSag.Value = Convert.ToDecimal(Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\MyPaint").GetValue("SAG_KALEM"));

            string tumRenkDizi = Registry.LocalMachine.OpenSubKey("SOFTWARE\\MyPaint").GetValue("SOL_RENK").ToString();
            string[] renkKodlar = tumRenkDizi.Split(',');
            pBoxRenkSol.BackColor = Color.FromArgb(Convert.ToInt32(renkKodlar[0]), Convert.ToInt32(renkKodlar[1]), Convert.ToInt32(renkKodlar[2]));

            tumRenkDizi = Registry.LocalMachine.OpenSubKey("SOFTWARE\\MyPaint").GetValue("SAG_RENK").ToString();
            renkKodlar = tumRenkDizi.Split(',');
            pBoxRenkSag.BackColor = Color.FromArgb(Convert.ToInt32(renkKodlar[0]), Convert.ToInt32(renkKodlar[1]), Convert.ToInt32(renkKodlar[2]));

            tumRenkDizi = Registry.LocalMachine.OpenSubKey("SOFTWARE\\MyPaint").GetValue("ARKA_RENK").ToString();
            renkKodlar = tumRenkDizi.Split(',');
            panel1.BackColor = Color.FromArgb(Convert.ToInt32(renkKodlar[0]), Convert.ToInt32(renkKodlar[1]), Convert.ToInt32(renkKodlar[2]));
            pictureBox1.BackColor = panel1.BackColor;

        }

Panelimde bir tane paint ekranım var. Bu ekranda kişinin çizimi sona erip bilgisayarı kapatıp tekrar ilgili kısmı açtığında en son yaptığı ayarları yine karşısına gelmesini istiyorum.
Bunun için register kullandım. Bu kodları başka bir bilgisayarda yazıp kendi bilgisayarıma aktardım
Fakat hata alıyorum kaydetmiyor nerede hata yapıyorum?

  1. Yolumu yanlış yazıyorum
  2. Yönetici olarak çalıştırmam gerekiyor fakat visual studio code idesinde öyle bir seçenek yok

Aldığınız hata nedir paylaşabilir misiniz?

Olabilir de olmayabilir de. Hata mesajı görürsek tahmin kolay olur.

Eğer Vs Code’u admin olarak başlatırsanız kodu çalıştırmak için ayrıca bir admin yetkisi ayarı yapmaya gerek yok.

Ama etrafından dolaşıp kodu release modunda build edip. Exe dosyayı bulup sağ tıklayarak ona admin yetkisi verip çalıştırıp deneyebilirsiniz fark varmı diye görme imkanınız olur.

Ben alternatif bir yol önereyim. Deneme programları yazarken ve test programları yazarken regstry kaydı kullanmak tehlikelidir. Bir anda çalıştığınız makineniz çalışmaz hale gelebilir.

Bunun yerine .ini dosyaları oluşturma ve kullanma konusuna bakabilirsiniz. Bu size daha az riskli bir çalışma ortamı sağlar.

Registry’me sürekli key ekleyen programları sevmem, ama kurulum klasöründe bir tane .ini dosyası duran program beni pek rahatsız etmez.

Google: C# .ini file

yazarak bakarsanız çabuk bulursunuz.

Her iki durumda da biraz daha bilgi verirseniz yine bakar destek sağlayabiliriz. Kolay gelsin.

Şöyle bir hata üstad

System.NullReferenceException: ‘Nesne başvurusu bir nesnenin örneğine ayarlanmadı.’

Microsoft.Win32.RegistryKey.OpenSubKey(…), null döndürdü.

Resimde tam görememekle beraber. Registry ye decimal bir key açıyorsun ama string yazıyorsun.

Hata tam okunmuyor ama bir decimal yazısı seçebildim.

Registry ye anaktarlar farklı açılır. String anahtar açmayı deneyebilirsin yada yada int anahtar açıp bilgileri sayı olarak kaydedebilirsin.

Edit: resimi indirip büyütüp baktım.

Burada registry okuma kısmını görüyoruz.

Oradan değer okuyamamış evet.

Bir de registry ye kayız yazdığın fonksiyonu gösterebilir misin?

EDIT 2:

Registry.LocalMachine.CreateSubKey(@"SOFTWARE\\MyPaint");

Yerine:

Registry.LocalMachine.CreateSubKey(@"SOFTWARE\\MyPaint\\");

Deneyebilir misin?

Kodun tamamını göremiyorum ama sanırım, değerleri kaydediyor devamında.

Bir yol sorunu gibi duruyor.

Yetkiden kaynaklı değil gibi.

Hala VS kurmadım elimdeki makineye denemeden tahminde bulunuyorum. Sırf senin için bir tane kuracağım sanırım daha çok bu konuda sorumuz olacak. Geri dönüş yaparsan sevinim.

Umarım çözeriz.

Merhaba semtex ustad
yurtdisindayim yazamadim,aksam atacagim cok tesekkur ederim

Üstadım öncelikle emeğine sağlık yurtdışında oldugum için dönüş yapamadım şimdi inceledim

Gerçekten muhteşemsin. İni File daha mantıklı geliyor sanki
Ama hem yönetici olarak çalıştırdım hemde sizin söylediğiniz gibi Slash olaylarını yazdıktan sonra program çalıştı tekrardan teşekkür ederim