• XSS.stack #1 – первый литературный журнал от юзеров форума

c# Registry

jen140

HDD-drive
Пользователь
Регистрация
30.05.2006
Сообщения
24
Реакции
0
Добрий день . Помогите пожалуста с кодом .
(Win vista) Dep off , Сам сижу под админом , е визуал студио тоже.
Если без if , тогда все работает
static private bool ExistanceCheck(string Start, string SubKeyPath, string KeyName, string DefaultVal)//true , changed , false (unexistante , other value)
{
RegistryKey rk = Registry.LocalMachine;//fcking c#
if (Start == "HKCU")
{
rk = Registry.LocalMachine;
}
else
{
rk = Registry.CurrentUser;
}


rk = rk.OpenSubKey(SubKeyPath);
object valor = new Object();
valor = rk.GetValue(KeyName);
try
{
if (valor.ToString() == null)
{
return false;
}
}
catch (Exception)
{
return false;

}
if (ValueCheck(Start, SubKeyPath, KeyName, DefaultVal) == true)
{
return true;
}
else
{
return false;
}

}
static private bool ValueCheck(string Start, string SubKeyPath, string KeyName, string DefaultVal)//true , default, false other
{
RegistryKey rk;
rk = Registry.LocalMachine;//fcking c#
if (Start == "HKLM")
{
rk = Registry.LocalMachine;
}
else if (Start == "HKCU")
{
rk = Registry.CurrentUser;
}
rk = rk.OpenSubKey(SubKeyPath);
object valor = rk.GetValue(KeyName);
if (valor.ToString() == DefaultVal)
{
return true;
}
return false;

}
Если идет так :
bool mrd = ExistanceCheck("HKCU", "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", "DisableRegistryTools", "0");
Все ок . А если биру "HKLM"
bool mrd = ExistanceCheck("HKLM", "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", "DisableRegistryTools", "0");
Дает ошибку.
Object reference not set to an instance of an object.

valor = rk.GetValue(KeyName);

...

Код:
RegistryKey rk = Registry.LocalMachine;//fcking c#
rk = rk.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System");
object valor = new Object();
valor = rk.GetValue("DisableRegistryTools");
И если поменяю местами
Код:
             RegistryKey rk = Registry.CurrentUser;//fcking c#
            if (Start == "HKCU")
            {
                rk = Registry.CurrentUser;
            }
            else
            {
                rk = Registry.LocalMachine;
            }
тоже не работает
 
не понимаю смысла этой конструкции
object valor = new Object();
valor = rk.GetValue(KeyName);
можно ведь
string valor = (string)rk.GetValue(KeyName);
//
по каким-то причинам не может получить значение, х.з. чо,
может так попробуй
Код:
string valor = null; 

            try
            {
            valor =  (string)rk.GetValue(KeyName); 
            if (valor == null)
            {
                return false;
            }
            }
хоть коряво , но может решить проблему
 
ок. отписуй результат

да вот еще так на заметку - глобальная обработка ошибок
Код:
Глобальный try и catch 

 internal static class Program
        private static readonly ILog LOG = LogFactory.GetLogger(typeof(Program));
        [STAThread]
        private static void Main(String[] args)
        {
                Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
                Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
                AppDomain.CurrentDomain.UnhandledException +=
                    new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
                try
                {
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    MainForm form = new MainForm();
                    if (!form.IsDisposed)
                    {
                        Application.Run(form);
                    }
                }
                catch (Exception ex)
                {
                    ShowErrorForm(ex.StackTrace + '\t' + ex.Message);
                }
            }
        }
        private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            if (e.ExceptionObject is Exception && (e.ExceptionObject as Exception) != null)
                ShowErrorForm((e.ExceptionObject as Exception).StackTrace + '\t' + (e.ExceptionObject as Exception).Message);
        }
        private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
        {
            if (e.Exception != null)
            {
                ShowErrorForm(e.Exception.StackTrace + '\t' + e.Exception.Message);
            }
        }
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх