Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Помещение программы в реестр (автозагрузку)


Автор: Zdvig 27.8.2005, 10:25
Сабж. Как это сделать в C# ?

Автор: Spawn™Production® 27.8.2005, 11:32
А в MSDN глухо ?

Код
public void WriteKey()
{
  RegistryKey regkey;/* new Microsoft.Win32 Registry Key */
  regkey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run\");
  regkey.SetValue("MyProg",(string)"path");
  Registry.LocalMachine.Flush();
}

Соответственно вместо MyProg напишешь название exe программу, а вместо path - путь к exe.

Автор: Zdvig 27.8.2005, 12:43
оооо пасиба большое!!

Только надо что-то добавить в using ?

Автор: Spawn™Production® 27.8.2005, 13:22
Код
using Microsoft.Win32;
, так как класс Registry член имеено Win32...

Автор: Zdvig 27.8.2005, 14:47
Ошибка лезет...

An unhandled exception of type 'System.UnauthorizedAccessException' occurred in mscorlib.dll

Additional information: Cannot write to the registry key.



пишу так:
Код

public void WriteKey()    // реестр
        {    
            RegistryKey regkey; /* new Microsoft.Win32 Registry Key */    
            regkey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run\");    
            regkey.SetValue("sdfg",(string)"path");    
            Registry.LocalMachine.Flush();    //тут ругается
        }

        private void Form1_Load(object sender, System.EventArgs e)
        {
            WriteKey();
        }

Автор: Spawn™Production® 27.8.2005, 14:50
Так, моя ошибка, в конце не ту ветку реестра указал... да и пару ляпсусов поставил... хм, надо хотя б подучить синаксис C#...
Вот тяк:

Код
public void WriteKey()
{
  RegistryKey regkey;
  regkey = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run\\", true);
  regkey.SetValue("MyProg",(string)"path");
  Registry.CurrentUser.Flush();
}

Автор: Zdvig 27.8.2005, 14:52
что-от страннное, всеравно ругается....

Автор: Spawn™Production® 27.8.2005, 14:53
Zdvig, я там ещё редактировал, последний вариант попробуй...
Добавлено @ 14:55
Код
public void WriteKey()    
{    
  RegistryKey regkey;    
  regkey = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run\\", true);    
  regkey.SetValue("MyProg",(string)"path");    
  Registry.CurrentUser.Flush();    
}

Автор: Zdvig 27.8.2005, 14:57
На том же месте...
Additional information: Cannot write to the registry key. smile

Автор: Spawn™Production® 27.8.2005, 15:09
Так, а какая у тебя винда ? Может ещё в этом загвоздка...
Вот такой вот код проверь, если не пашет, то в чём ошибка, понятия не имею... Я сам не сишник, но то что пишу ясно и чётко понимаю.
Код
RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", true);
// Set value of sub key
key.SetValue("123", "321");

Автор: Zdvig 27.8.2005, 15:16
Винда XP sp2.
А можно точно, после чего этот код всавить... Я с C# всего недельку сижу...

Автор: Spawn™Production® 27.8.2005, 15:19
Можно прямо в Form_Load...

Автор: Zdvig 27.8.2005, 15:22
Не помогает, все то же. Надо конкретный пример смотреть, работы с реестром.

Автор: Spawn™Production® 27.8.2005, 15:28
Zdvig, ну а я по-твоему куда заглядывал ? Сначала конечно из MSDN, а потом уже сверился с примерами, но там написано именно так, как я тебе написал, хех, вот тут смотри - http://www.csharphelp.com/archives2/archive430.html

Автор: Zdvig 27.8.2005, 15:38
Код

public void WriteKey()    
{    
    RegistryKey regkey;    
    regkey = Registry.CurrentUserOpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run\\");    
    regkey.SetValue("MyProg","path"); // если это убрать - работает... но ессено не пишет ничего туда :)    
    Registry.CurrentUser.Flush();    
}

Автор: Spawn™Production® 27.8.2005, 15:42
Zdvig, блин, вот эта строка
Код
regkey = Registry.CurrentUserOpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run\\"); 

Должна вот так выглядеть.
Код
regkey = Registry.CurrentUserOpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run\\", true); 

Иначе запрещена запись в открываемый ключ реестра...

Автор: Zdvig 27.8.2005, 15:58
И где вы взяли тот код smile

Вот правильный вариант:

Код

public void WriteKey()    
        {    
            RegistryKey OurKey = Registry.CurrentUser;
            OurKey = OurKey.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run\",true);
            OurKey.SetValue("{NAME}","{PATCH}");
            OurKey.Flush();
            
        }

Автор: Spawn™Production® 27.8.2005, 16:02
Цитата(Zdvig @ 27.8.2005, 16:58)
И где вы взяли тот код smile

Вот правильный вариант:

Код

public void WriteKey()    
        {    
            RegistryKey OurKey = Registry.CurrentUser;
            OurKey = OurKey.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run\",true);
            OurKey.SetValue("{NAME}","{PATCH}");
            OurKey.Flush();
            
        }

Из MSDN родной, из MSDN, а вот ты что-то перемудрил когда копировал.
Эх, в общем разбирайся, может научишься когда...

Автор: Zdvig 27.8.2005, 16:23
еще вопрос теперь не понимает строчку

Код

string PathInApp = Application.StartupPath+"\"+Application.ProductName+".exe"; // - подчеркивает .exe


Код

string PathInApp = Application.StartupPath+"/"+Application.ProductName+".exe"; // - все нормально....


Почему так может быть?


Цитата
Эх, в общем разбирайся, может научишься когда...


Вот я и научился smile Код выше.

Автор: Spawn™Production® 27.8.2005, 16:26
Модератор: Пожалуйста, один топик - один вопрос.

Автор: Zdvig 27.8.2005, 16:40
Сам на свой вопрос отвечу, может кому нужно будет

Код

string PathInApp = Application.StartupPath+"\\"+Application.ProductName+".exe";

Автор: mr.DUDA 27.8.2005, 23:19
Zdvig, это называется "экранирование слэшей".

Автор: Bounz 28.8.2005, 09:04
Цитата(Zdvig @ 27.8.2005, 14:47)
Ошибка лезет...

An unhandled exception of type 'System.UnauthorizedAccessException' occurred in mscorlib.dll

Additional information: Cannot write to the registry key.

С реестром ещё не доводилось работать, но судя по названию ошибки UnauthorizedAccessException я думаю проблема в том, что у текущего пользователя нет прав для записи в эту ветку реестра... Попробуй провентилировать эту тему.

Автор: Zdvig 28.8.2005, 12:47
mr.DUDA
Расскажи пожалуйста, для чего это. И зачем перед строкой ставится знак @


Bounz

Небыли выставлены "права" на запись в ветку. Уже все работает, код выше.

Автор: Spawn™Production® 28.8.2005, 12:53
Цитата(Zdvig @ 28.8.2005, 13:47)
Расскажи пожалуйста, для чего это. И зачем перед строкой ставится знак @

Точно я не знаю, но судя по виду со знаком и без, чисто логически получается, что знак @ нужен для того, чтобы не писать двоный слешы.
Цитата(Zdvig @ 28.8.2005, 13:47)
Небыли выставлены "права" на запись в ветку. Уже все работает, код выше.

У меня код был один в один...

Автор: Zdvig 28.8.2005, 14:08
Интересно, но в этой строке

Код

string PathInApp = Application.StartupPath+"\\"+Application.ProductName+".exe";


знак @, неработает...

Автор: Дрон 28.8.2005, 23:32
Zdvig
И где же ты в той строке его ставишь? smile

И вообще не извращайтесь, а пишите:
Код

Path.Combine(Application.StartupPath, Application.ProductName+".exe");

Автор: luxadevianta 27.6.2009, 01:30
А кто подскажет, как связать свою программу с типом файлов (чтобы файлы из проводника открывались моей программой)?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)