![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
ShowMessage |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 14.9.2006 Репутация: нет Всего: нет |
Киким способом можно сделать чтобы программа которую запустили один раз или несколько раз, по истечении к примеру 10 дней после запуска или в конкретную дату время запускалась сама? возможно ли такое сделать через реестр?
К примеру нужно запустить программу 29/07/2008 в 12:15 к примеру? Это сообщение отредактировал(а) ShowMessage - 24.7.2008, 14:14 |
|||
|
||||
Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 8 Всего: 76 |
Натроить TaskSheduler
![]() -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
ShowMessage |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 14.9.2006 Репутация: нет Всего: нет |
Спасибо, буду разбираться...
А другие варианты есть??? Это сообщение отредактировал(а) ShowMessage - 24.7.2008, 15:23 |
|||
|
||||
Magik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 6.12.2007 Репутация: 2 Всего: 2 |
В делфи есть модуль DateUtils, который определит всё то, что нужно. У меня было так:
uses Windows,………, DateUtils, ……. ………………….. ………………….. implementation {$R *.dfm} var Month,Year,Day,Hour,Min: word; R: String; procedure TForm1.FormCreate(Sender: TObject); begin Hour := HourOf(Now); Min := MinuteOf(Now); Day := DayOf(Now); Year:= yearOf(Now); Month:= MonthOf(Now); R:= IntToStr(Hour)+ IntToStr(Day) + IntToStr(Month+Hour); ……………………….. end; ……………. Сравнивай текущую дату с планируемой, и если они совпадут, запускай то, что нужно. |
|||
|
||||
Лиходей |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 25.5.2008 Репутация: нет Всего: нет |
Сначала нужно добавить прогу в автозагрузку:
При запуске проги (еще до инициализации приложения) проверять на наличие нужной даты или проверяем др. условия это уж как пожелаете... файл *.dpr
|
||||
|
|||||
CodeMonkey |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
Ну не надо давать таких советов
![]() Вот ещё, в автозагрузку. Вот благодаря таким вот "программистам" мы и имеем кучу мусора (не сказать бы говнища) в автозагрузке и кучу мусора при работающей системе. Во-первых, не факт что машина будет вообще перезагружаться. Может она три месяца без остановки работать будет. Только не надо тут дальше придумывать - типа, а мы постоянно висеть в памяти будем (а то найду и убью. Лично. ![]() Для таких задач есть планировщик. Всё. Точка. Не надо ничего изобретать. И даже ленью своей вы не оправдаетесь (типа: вот ещё код писать). Берите JclTask.pas из JCL. Всё в удобной объектной упаковке - пользуйся на здоровье. P.S. Прошу прощения за немного резкий пост, просто достали такие "советы". Если не понятно, чем это плохо, я настоятельно рекомендую почитать: It's my computer, dagnabbit, not yours! Why do people write applets? So why are applets so bad, anyway? Это действительно серьёзно. Посмотрите, даже в Vista появляются изменения, чтобы хоть как-то сгладить эту ситуацию, например: SetThreadPriority from Run key Startup, Locality Рекомендации, как надо: Applet Mitigations Applet Mitigations - Updaters (автор вопроса - посмотрите: мне кажется это ваш случай) Applet Mitigations - Notification Area Handlers Applet Mitigations - Services Applet Best Practices P.P.S. ...моя думает, не написать ли что-то типа небольшой статьи по тому как правильно и как неправильно делать... Это сообщение отредактировал(а) CodeMonkey - 25.7.2008, 08:44 -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
Poseidon |
|
||||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 10 Всего: 133 |
А как по-твоему работает планировщик? Кому отдан один из висящих в памяти процессов svchost.exe? Ты разбирался? Это сообщение отредактировал(а) Poseidon - 25.7.2008, 09:36 -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
||||
|
|||||
CodeMonkey |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
Ну. Висит он в процессах. И дальше что? -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
EndErr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 9.12.2007 Репутация: нет Всего: нет |
Согласен с CodeMonkey, и нет Poseidon, пусть этот поцес планирования и висит в системе он для этого и создан чтоб в нужное время запускать разные юзверские штучки, зачем других планировщиков создавать? чтоб и они ресурсы компа жрали?
|
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 10 Всего: 133 |
А если у меня Планировщик отключен вообще как служба? Я в пролете? ИМХО, программа не должна зависеть от сторонних факторов. Тем более что можно не всю программу держать в памяти, а только ту часть, которая отвечает за запуск. В современных условиях и гигабайтах оперативной памяти, эти пару сотен киллобайт никто и не почувствует... А вот если программа не запустится в нужное время, заметят все.
Точно так же могу ответить и я: ну висит мой собственный планировщик для этой программы и дальше что? Это сообщение отредактировал(а) Poseidon - 25.7.2008, 10:20 -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 8 Всего: 76 |
Как вариант есть утилита nnCron(как-то так называется). Отзывы лесные слышал,но сам не использовал. Вроде програмно настроить можно. ![]() ![]()
хм, не знал что у джедаев есть реализация. Спс за информацию. Тут годик назад проскакивала темка, тоже реализовывали обертку. Showy еще с кем-то... Всегда можно предупредить о том что отключен сервис пользователя. А вешать что-то еще свое, имхо, любой админ сразу задумается что эт за фигня висит. Вот скажи, если кто-то отключил сервис SQL-сервера программа работающая с базой тоже должна работать? -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 10 Всего: 133 |
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
CodeMonkey |
|
||||||||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
Офигенный аргумент. А если у меня драйвера для сетевухи нет, мой авто-апдейтер тоже в пролёте? Или вон, как Rennigth правильно заметил, если служба SQL стоит, я тоже в пролёте? Ну предупредите пользователя при установке. Можете даже кнопку "Включить службу" повесить. У любой программы есть определённый круг требований к окружению для выполнения. И наличие и работоспособность системного компонента (который включен по-умолчанию) - самое мягкое из них. Ну надо же. Скажите об этом всем программам, что используют либы MSVCRT. Их у меня может и не быть. Я не говорю уже про .NET. По-моему, вы ошиблись форумом. Операционки пишут не здесь. Посмотрите, ведь есть примеры даже в реальной жизни. Вот вы сами зависите от поставок продуктов в магазин, от электричества, от транспорта, от подачи воды в квартиру. И не считаете это чем-то зазорным. "Не зависимая от сторонних факторов" программа - это сродни тому, как человек живёт в центре города, но использует только то, что смог добыть или изготовить своими силами (еду выращивает сам, одежку шьёт из шкур и т.п.).
Не понимаю. А зачем она мне там нужна? Часть проги в памяти. Особенно, если её автоапдейт мне там не нужен. И ведь сделают ведь такой инсталятор, который не даст опции не засовывать программу в автозапуск (грррррр!). И иконку в трей ещё добавят (дважды грррр!).
Я смотрю у вас опыта побольше, чем у самого Microsoft. Вы случайно не заметили, что все службы размещаются в одном процессе (svchost.exe)? Разделение на большее число процессов делается только в случае, когда нужно разделить контексты безопасности. Ведь не с пустого места они так делают. И не надо тут ля-ля про гигабайты памяти на современных компьютерах. У меня сестра на 256 Mb сидит и не жалуется (там 2x128 SD-RAM и больше не добавить, увы). И система ворочается с приличной скоростью. Потому что её писали спецы в Microsoft, а не такие "советчики".
Вы действительно не видите разницы между одним системным процессом (который даже не процесс, а лишь один компонент процесса) и двадцаткой автоапдейтеров, написанных такими вот "умельцами"? 1% от каждого и мой CPU загружен на 20% в режиме простоя. А, это почти ничего не стоит, а, это не помешает! Чуть-чуть здесь, чуть-чуть там - а в итоге разница в 1.5-2 раза при запуске нулевой ОС и ОС с кучей установленных программ.
Если это не указано в требованиях программы (типа описание работы или ещё что-то) и сама программа на это не ругается, то это - плохая программа. Выкидывайте её.
Совершенно верно. Только вот с точки зрения автообновлений планировщик заданий не является ненужной службой. Кроме того, помимо автообновлений, на него сажают периодические сканы на вирусы, дефрагментацию диска и другие процедуры обслуживания. По-моему проще признать, что вы ошиблись с определением "полезности службы". Вот так уж устроена система, что позволяет пользователю всё. Хотите - удаляйте файлы, хотите - кикайте системные процессы, хотите - отключайте службы. Только вот ответственность за свои действия несёте вы, а не ОС и не авторы сторонних программ. Пример. Я установил deny all для всех на папку Temp. Теперь 90% установщиков не работает и не работает 10% уже установленных программ. Это моя вина или их? Я считаю - что моя. А вы говорите - что их.
Возможно. Но двадцать автоапдейторов весят больше, чем планировщик. Кроме того, если планировщик уже работает (как это и есть на большинстве машин), то добавочная стоимость автообновлялки и вовсе 0 ресурсов. А если этот самопальный автоапдейтер ещё мне мой ноут в спящий режим не даст перевести, то я его автора самолично четвертую. P.S. Блин, я опять немножко вышел из себя. Прошу прощения, не обижайтесь. P.P.S. Короче говоря, свою точку зрения я расписал, ссылками подкрепил. По этому вопросу высказываться больше не буду. Это сообщение отредактировал(а) CodeMonkey - 25.7.2008, 11:56 -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
||||||||||||
|
|||||||||||||
Лиходей |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 25.5.2008 Репутация: нет Всего: нет |
CodeMonkey, не знаю почему такой наезд, мне кажется это слишком
Был предоставлен нормальный код, а насколько он актуальный для автора решать только ему.. Насчет планировщика - конечно это вариант, но опять же все зависит от поставленной задачи Вот серьезно CodeMonkey, както жетско сказал.. Плохо что автор не отписал ся, а может я ему и помог Всетаки был показан способ записи в реестр и запуск приложения по определенной дате. А насчет способа активизации приложения я не спорю, тут нужно выбирать самый оптимальный вариант Не всегда есть возможность ручками настроить планировщик.. |
|||
|
||||
Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Не надо искажать факты. Был предложен способ запуска приложения при каждом старте системы. Это совем не запуск по определенной дате. (Про ошибки в коде я помалкиваю ). А создание нового процесса - очень "тяжелая" операция для системы. Довольно накладно каждый раз создавать новый процесс только для того, чтобы он проверил текущую дату. |
|||
|
||||
ne0n |
|
|||
PlayBoy ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 5.8.2005 Где: Н.Новгород Репутация: 4 Всего: 11 |
![]() Пхах, заметил уже давно что CodeMonkey любит поспорить=) но что мне нравиться так то, что все его аргументы вменяемы интересно почиать иногда становиться ![]() |
|||
|
||||
Лиходей |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 25.5.2008 Репутация: нет Всего: нет |
Я сам только учусь, и в великие спецы не лезу, поэтому буду благодарен если вы Riply расскажете о них(ошибках) более подробно. А какой вариант решения данной проблемы вы предлагаете. |
|||
|
||||
Poseidon |
|
||||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 10 Всего: 133 |
Хотелось бы увидеть как Ваша сестра матерится, когда на ее компьютер попытались бы установить последнее творение "спецов" (я про Висту сейчас) и та начала бы ругаться "слабенький компьютер" ![]() Думаю, Ваше мнение про "спецов" быстро бы изменилось в сторону "пора менять железо". Смею заметить, что все (по крайней мере те, что я встречал) антивирусы запускают (имеют такую опцию) сканы на вирусы самостоятельно, а не с помощью планировщика. Дефрагментация, кстати, в Висте [стандартным дефрагментатором] тоже запускается из того же дефрагментатора и планировщик ему не нужен. А еще автообновления самой Винды запускаются без планировшика, а "из себя". Указано в 3 ночи запуститься, так и запустится, хотя служба планировщика остановлена в этот момент. Ну и..? Кстати, Windows Defender... ладно не буду ![]() -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
||||
|
|||||
Riply |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Плох тот солдат, который не мечтает стать генералом ![]()
Ошибки в коде к теме данной ветки не относятся, но раз уж заговорили, кратко скажу что мне не нравиться. Поступим так: я задаю вопросы - Вы отвечаете. Ваш код:
1. Что будет (какие строчки и как будут выполнятся) если исключение произойдет в 01 строке ? 2. Строка 03. Что будет если openkey вернет False ? (При ответе рассмотреть различные причины, почему openkey не отработала так как мы ожидали) 3. Что будет при исключении в строке 04 ? 4. При каких условиях мы попадаем на строчку 11 ? (Ожидается конкретный ответ типа: искючение в строках таких-то) Почему мы считаем, что нужна повторная попытка записи ? 5. - ... Почти аналогичные вопросы задать себе для всех последующих строчек P.S. Могла что-то упустить, ибо не работаю с этим классом (ну не нравиться он мне и все тут ![]() Я полностью согласна с теми, кто говорит, что не надо создавать новый процесс. Надо просто вежливо попросить один из уже имеющихся процессов в системе, запустить нас такого-то числа ![]() P.S. Не хотите вежливо, тогда "сделайте ему предложение, от которого он не сможет отказаться" (с) ![]() |
||||
|
|||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 10 Всего: 133 |
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
"Как прикажешь тебя понимать, Саид ?" (с) В системе нет ни одного процесса или нет согласных с нашей просьбой ? ![]() Если нет согласных, то см. мой постскриптум. ![]() Я думаю, что все же найдется тот, кто добровольно выполнит нашу просьбу В крайнем случае, сообщим пользователю о причинах неудачи. |
|||
|
||||
Лиходей |
|
||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 25.5.2008 Репутация: нет Всего: нет |
Ну дак я маршалам хочу стать... ![]() Если гдето в диапазоне строк с 01 - 04 происходит исключение, то выполняются строки 06, 07, а затем управление передается на строку 11, если исключения не произошло, то строки 10 -17 не выполняются.
Потому, что в раздел hkey_local_machine\software\microsoft\windows\currentversion\run пускают пользователей только с правами админа, другими словами если админ запустит прогу, то выполнится код с 01- 08 строками (автозагрузка для всех пользователей), если юзер - сработает исключение в строке 03, освободится память выделенная под обьект и выполнятся строки 10 - 17 (автозагрузка для текушего пользователя) Насчет строк 03, 15 я согласен с вами лучше поставить true, хотя я не видел такого, чтоб не было этих ветвей реестра. А вы?
Как??? Нужен пример, или ссылка на статью опять же с примером. Это сообщение отредактировал(а) Лиходей - 28.7.2008, 11:50 |
||||||||
|
|||||||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 10 Всего: 133 |
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Лиходей |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 25.5.2008 Репутация: нет Всего: нет |
Согласен, но кто знает что нужно автору... Пусть выбирает сам, может он шпионить за кемто собрался...
Это если в HKEY_LOCAL_MACHINE наделать кучу разделов и хранить там данные |
||||
|
|||||
Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 8 Всего: 76 |
Лиходей, данный тобой код плох хотябы тем что он построен на обработке исключений, хотя данный класс(TRegistry) имеет методы проверок существования ключей(значений) как ExistKey(ExistValue). Ты представляешь хоть примерно что происходит при исключении? Советую почитать тут, может это отобьет желание так строить логику программы...
прошу прощения, ValueExists(KeyExists). Это сообщение отредактировал(а) Rennigth - 28.7.2008, 12:16 -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
CodeMonkey |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
Тогда тем более не нужно давать советы. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Ну уж нет. Общими словами ты не отделаешся ![]() Ответы должны быть полными на каждый вопрос. Пример:
Начало ответа на первый ворос (закончишь его сам): Управление перейдет на строку 06, где мы будем вызывать метод reg.CloseKey у несуществующего объекта и успешно получим новое исключение в секции finally ![]() После этого переходим на строчку ... и т.д. В таком же духе ответь (для себя) на все вопросы. Когда ты это сделаешь, то я думаю, ты без проблем напишешь "правильный" код. |
|||
|
||||
Лиходей |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 25.5.2008 Репутация: нет Всего: нет |
Все согласен, вместо try except лучше использовать ValueExists. Но секции try .. finally использованы правильно Всеже интересно коечто выяснить Вопрос к Riply. А почему вы считаете, что исключение может возникнуть уже на этапе создания обьекта? (строка 01) Что там такого критичного? Я только проверял (запускал прогу с правами юсера) с закомментированными строками 03,04, исключения не возникало. Исключение возникает только начиная с reg.openkey..(строка 03)
Приведу на этот счет цитату из книги
Буду рад если если разъясните... |
||||||
|
|||||||
Riply |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Пока не доказано обратное, ты обязан исходить из того, что может. (а оно может, например нехватка ресурсов ![]() Как пример того, что ошибка может быть где угодно чуть пооффтоплю: Может ли простой вызов функции MessageBox из простого приложения вызвать исключение ? (передачу невалидных указателей в функцию не рассматриваем) Ответ: может не только вызвать исключение или привести к краху программы, но и полностью обрушить систему (XP). Можешь погуглить с примерно таким запросом: "убийственный MessageBox" (точно не помню) ![]()
И чего это все мне твердят, что нельзя переходить дорогу на красный свет. Я уже десять раз проверила (переходила) и ничего ![]() А чего тут разъяснять ? Объект не существует (мы предположили, что было исключение при создании). Так какого черта, ты пытаешся к нему обратиться ? Может лучше этого не делать ? ![]() |
||||
|
|||||
CodeMonkey |
|
||||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
Мммм.... вообще вы правы в том, что не следует вызывать исключения, когда можно их предотвратить. Но мне кажется, что это - не тот случай. Можете ткнуть пальцем в место, которое вызвало у вас возмущение? Я его не вижу, в частности:
В исходном коде try/except стоит на случай, если у нас нет прав на запись. Тогда какую именно проверку в приведённом коде вы имеете ввиду?
ЧТООООО???? Срочно назвать автора этой книжки, я пойду его сжигать на костре, а вы пока эту книгу можете порвать на мелкие кусочки ![]() ![]() Защищаемым блоком является блок кода от try до finally или except, но не далее.
А почему нет? Даже, если посмотреть в реализацию конструктора, то всё равно мы не можем закладываться на конкретную реализацию объекта. Ведь код потом может компилироваться в другой версии Delphi (или вообще не Delphi), в которой добавлено потенциальное место возникновения исключения. К тому же: в любом конструкторе может возникнуть исключение. Пример - EOutOfMemory ![]() За исключением CloseKey в finally-блоке. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
||||||||
|
|||||||||
Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 8 Всего: 76 |
Я имел ввиду многих исключений можно избежать. Проверка на ExistsKey(Value) избавила бы от отного из них. Также можно проверить есть ли доступ к ключу значению св-вом Access. Я не имел ввиду что от try/finally(except) надо отказываться, я имелл вииду что от них можно зависимость снизить. В частности не генерили бы ERROR_FILE_NOT_FOUND в случае отсутствия ключа(значения). Добавлено через 3 минуты и 6 секунд п.с. что-то мы в офф-топ ушли... ![]() -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
CodeMonkey |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
Ну, я об этом и спрашиваю. Какого исключения и в каком месте вы имеете ввиду? WriteString-у наплевать на наличие/отсутствие ключа. Или вы про
Так она вообще не возбуждает исключений. Кроме того, отсутствие такого ключа как раз и будет внештатная ситуация (не существует системный ключ). И воспользоваться исключениями здесь будет весьма кстати. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
||||
|
|||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 10 Всего: 133 |
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 8 Всего: 76 |
CodeMonkey, да, вероятно вы правы, я имел ввиду OpenKey и не посмотрел что он не генерит ошибку.
-------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
по поводу сабжа и дискуссии, можно предусмотреть два варианта "планирования":
1. Если у пользователя включена служба планировщика, то пользовать его 2. иначе пользовать самописный. причем в опциях программы предоставлять возможность выбора. тогда будут удовлетворены запросы обоих сторон спора, имхо) -------------------- There are always someone smarter than you... |
|||
|
||||
Riply |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Т.к. мне лень дальше разбирать этот код (очень я ленивая),
тем более с классом и подходом, которые мне очень не нравяться, ![]() набросала свой вариант:
P.S. Возврат ERROR_ACCESS_DENIED при нехватке прав - это мое предположение, надо проверить что возвращает RegOpenKeyExW на самом деле. Добавлено через 3 минуты и 4 секунды
Ну вот, "пришел лесник и всех выгнал" (с) MetalFan, и о чем же нам теперь спорить прикажите ? ![]() |
||||
|
|||||
Лиходей |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 25.5.2008 Репутация: нет Всего: нет |
Riply проверял все работает - RESPECT!!! Лично для меня очень содержательная беседа получилась, узнал много нового... Спасибо.
|
|||
|
||||
ReaM |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 23.9.2008 Репутация: -2 Всего: -2 |
Модератор: Сообщение скрыто. |
|||
|
||||
Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Выскажу ка я свое IMHO:
Переход на личности начинается там, где кончаются аргументы. Данный случай особенно тяжелый, ибо они (аргументы) даже не начинались. Непрекрытое хамство - обычно результат комплекса неполноценности и единственное средство "возвысится" в собственных глазах над человеком, значительно превосходящем тебя, например, в умственном развитии. Т.к. я не люблю ни то ни другое, то добавлю минус в репутацию ReaM-а. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |