Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2010, 12:52   #1
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию Перестал работать авторан в Win 7

Вот этот код работает в XP без проблем
Код:
procedure TForm1.AddAutoRun;
begin
  reg:=TRegIniFile.Create;
  reg.RootKey:=HKEY_LOCAL_MACHINE;
  reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion', true);
  reg.WriteString('Run', 'English Words', paramstr(0));
  reg.CloseKey;
  reg.Free;
end;
В Windows 7 этот же код вызывает исключение: Cannot create key.
Такая директория в реестре существует, и там есть ключи других программ.
Пробовал менять второй параметр в OpenKey на False, ничего не дает.
В чем тут собака порылась?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 20.10.2010, 13:03   #2
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Я делаю как-то так:
Код:
procedure WriteRun(AppName: string; on: integer);
var
 Reg: TRegistry;
begin
 Reg := tregistry.create;
 with Reg do begin
 RootKey := hkey_current_user;
 OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',true);
 if on = 1 then
 WriteString(AppName, paramStr(0))
else
 DeleteValue(AppName);
end;
 Reg.CloseKey;
 Reg.Free;
end;
И вроде бы всё норм.
_-Re@l-_ вне форума Ответить с цитированием
Старый 20.10.2010, 13:16   #3
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Спасибо, попробую так.

p.s. Еще раз спасибо, все работает.
Нашел в чем проблема, семерка блочит запись в HKEY_LOCAL_MACHINE. Вот такое исключение возникает:
First chance exception at $75A39617. Exception class ERegistryException with message 'Failed to set data for 'English Words''. Process ew.exe (972)
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 20.10.2010 в 13:28.
mutabor вне форума Ответить с цитированием
Старый 20.10.2010, 15:33   #4
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Хм... Интересно. А у меня первоначальный вариант прекрасно работает...
Баламут вне форума Ответить с цитированием
Старый 20.10.2010, 15:49   #5
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

За HKEY_LOCAL_MACHINE ногой надо в лицо. Начиная с 2000-го года.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 20.10.2010, 17:26   #6
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
За HKEY_LOCAL_MACHINE ногой надо в лицо. Начиная с 2000-го года.
Ну, это не мне, а автору книги, откуда я это взял.
GunSmoker, какой-то вы агрессивный.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 20.10.2010, 18:03   #7
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Забудьте про реестр, для чего вам дана папка UserStartup ? А именно \Start Menu\Programs\Startup. Там создаете/удаляете ярлык на ваш .exe файл.

Для особо не верующих, и для тех кто думает о будущем, а не остановился на XP

1. Не требует доступа к реестру, а значит не нужны права администратора, и UAC не будет спрашивать ничего
2. Пользователь самостоятельно сможет спокойно удалить автозапуск вашего приложения, без запуска вашего приложения или других инструментов для чистки "мусорки" (реестра)

Последний раз редактировалось BOBAH13; 20.10.2010 в 18:05.
BOBAH13 вне форума Ответить с цитированием
Старый 21.10.2010, 14:39   #8
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от mutabor Посмотреть сообщение
GunSmoker, какой-то вы агрессивный.
Должно наглядно указывать на глупость этого подхода. А то многие не понимают. (и живёт этот код вот уже 10 лет!)

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Забудьте про реестр, для чего вам дана папка UserStartup ? А именно \Start Menu\Programs\Startup. Там создаете/удаляете ярлык на ваш .exe файл.
+ 100

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
1. Не требует доступа к реестру, а значит не нужны права администратора, и UAC не будет спрашивать ничего
Смотря где. All users - ещё как требует. User - нет.

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
2. Пользователь самостоятельно сможет спокойно удалить автозапуск вашего приложения, без запуска вашего приложения или других инструментов для чистки "мусорки" (реестра)
+ 100
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.

Последний раз редактировалось GunSmoker; 21.10.2010 в 14:48.
GunSmoker вне форума Ответить с цитированием
Старый 21.10.2010, 14:40   #9
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
Забудьте про реестр, для чего вам дана папка UserStartup ? А именно \Start Menu\Programs\Startup. Там создаете/удаляете ярлык на ваш .exe файл.
Вот интересно, я её у себя не нашёл.
_-Re@l-_ вне форума Ответить с цитированием
Старый 21.10.2010, 14:47   #10
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от _-Re@l-_ Посмотреть сообщение
Вот интересно, я её у себя не нашёл.
Как несложно догадаться - путь написан на коленке, примерно - только чтобы было понятно, о чём идёт речь. И означает этот путь папку Автозагрузка. Кроме того, он может меняться, в зависимости от того, как поставлена система (и какая система).

А получить её можно через SHGetSpecialFolderPath(... CSIDL_STARTUP ...).
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перестал работать инетрнет Golovastik Операционные системы общие вопросы 8 16.01.2010 14:12
перестал работать cd-rom Betty Компьютерное железо 7 22.08.2009 09:10
Неожиданно перестал работать код kry Помощь студентам 5 12.01.2009 09:11
Перестал работать поиск в ХРюше. Adamant Свободное общение 5 23.08.2008 01:30