![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Автозапуск через Реестр [D7, WinXP]
Ilshat © (2008-01-09 05:48:00)Собственно проблема не в Делфи, ключ реестра устанавливается прекрасно, работает, но по непонятным мне причинам на программу начинает ругаться Касперский Интернет Секьюрити 7(мониторинг реестра отключен, работает только проактивная защита). Программа пустая, есть только процедура для автозапуска.
procedure DoAppToRun(RunName, AppName: string);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
with Reg do
begin
RootKey := HKEY_LOCAL_MACHINE;
OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True);
if ReadString(RunName) <> AppName then
WriteString(RunName, AppName);
CloseKey;
Free;
end;
end;
Все сторонние программы спокойно устанавливают себя в автозапуск... кстати и вирусы тоже... А моей почему-то нельзя. В чем хитрость?
PZ (2008-01-12 18:56:00) [1]> [9] Loginov Dmitry © (12.01.08 10:20)
Спасибо за разъяснение.
Поскольку я у себя и пользователь и администратор неприятностей не возникало.
Loginov Dmitry (2008-01-12 10:20:00) [2]> Вообще-то в качестве пользователя выступаю я сам. А в чем,
> собственно, игнорирование?
> Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',
> False);
> If AutoRunChekBox.Checked then
> Reg.WriteString(Application.Title, ParamStr(0))
> else
> Reg.DeleteValue(Application.Title);
Данный код сработает только под учетной записью администратора. Если текущая учетная запись - "пользователь с ограниченными правами", то Reg.OpenKey() не сработает и Reg.WriteString() приведет к AV. Нужно проверять результат работы Reg.OpenKey(), как это сделано в [5]
PZ (2008-01-12 09:42:00) [3]Вообще-то в качестве пользователя выступаю я сам. А в чем, собственно, игнорирование?
KilkennyCat (2008-01-11 20:32:00) [4]
> PZ
тоже пользователей игнорируем?
PZ (2008-01-11 14:41:00) [5]Вот у меня работает нормально следующий код:
procedure TOptionFrm.AutoRunChekBoxClick(Sender: TObject);
Var
Reg : tRegistry;
begin
Reg := tRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run', False);
If AutoRunChekBox.Checked then
Reg.WriteString(Application.Title, ParamStr(0))
else
Reg.DeleteValue(Application.Title);
FreeAndNil(Reg);
end;
maxistent (2008-01-10 00:42:00) [6]а попробуй изменить
RootKey := HKEY_LOCAL_MACHINE;
на
RootKey := HKEY_CURRENT_USER;
и
OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True);
...
на
if OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', FALSE) then
...
KilkennyCat (2008-01-10 00:39:00) [7]Может, программа не для пользователя написана?..
Игорь Шевченко (2008-01-09 14:15:00) [8]а зачем вирусам через реестр запускаться ? Незачем
Ilshat (2008-01-09 09:01:00) [9]Моему строка нравится. Ему перестает нравиться только когда пытаешься установить себя в автозапуск, то есть ему не нравится интерпретация кода, а не его внешний вид. Тест на поиск вирусов программа проходит... А вот дальше проблема...
Loginov Dmitry (2008-01-09 07:57:00) [10]Не только Касперский на такое ругается. AVG на подобный код у меня также ругался, причем без вопросов снес все exe-шки и dll-ки, где такой код увидел! К чему бы это? :)
Скорее всего не нравится строка 'Software\Microsoft\Windows\CurrentVersion\Run'. Попробуй сформировать ее динамически.