понедельник, 9 февраля 2009 г.

Windows 7 и Delphi

Поддавшись случившейся не так давно в Интернете истерии по поводу выхода первой публичной беты Windows 7, скачал себе 64-разрядную версию и на некоторое время пропал в ней. :) Это было мое первое знакомство с 64-разрядной операционной системой (не говоря уже о Windows 7), хотя мой компьютер уже давным-давно поддерживает их. Все установилось и заработало на удивление гладко, за исключением дурацкого 3G модема от билайна (обыкновенный GPRS-модем от мегафона даже нисколечко не сопротивлялся). Возможно, Microsoft более серьезно подошла к разработке своей новой операционки, а возможно рассказы о проблемах 64-битных систем оказали такими же «сказками на ночь», как и большинство сказок про Vista. Мне почему-то кажется что второе. :)

Но это не очередной хвалебный пост в пользу Microsoft, так что на этом закругляюсь. Остановлюсь только на работе Delphi в Windows 7. Delphi 2009 устанавливается и работает без проблем – так как ей и положено. Про Delphi 7 пока ничего толком сказать не могу, поскольку еще не устанавливал ее, но мне кажется, что также проблем не будет.

Удивительно, но весь негатив сопутствующий появлению Windows Vista, превратился в позитивные настроения всей «экосистемы» (как это называет Microsoft) перед выходом Windows 7. Это касается Delphi-сообщества, вот например Daniel Wischnewski уже создал прототип нескольких компонентов, позволяющих уже сейчас добавлять в приложения поддержку новых возможностей Windows 7 (в первую очередь визуальных).


Естественно, что все эти новые возможности будут работать только в Windows 7. И еще важное замечание. Хотя у компонентов и присутствует инсталлятор, он просто копирует необходимые файлы, устанавливать их придется вручную.


25 комментариев:

  1. установи delphi 7 и воспользуйся отладчиком.... посмотрим что тогда скажешь )

    ОтветитьУдалить
  2. 2Анонимный,
    не понял сарказма ... :)

    Хотя сам давным давно не пользуюсь этой версией, все же установил и протестировал. При запуске выдается предупреждение, что существуют проблемы совместимости - так же как это раньше было в Vista. Однако больших проблем, явно бросающихся в глаза, я не обнаружил. Отладчик так же работает стабильно.

    ОтветитьУдалить
  3. хм хм... мне сначала тоже показалось, что дельфи 2009 работает, но вот этот код:

    RegOpenKey(HKEY_LOCAL_MACHINE,'\SOFTWARE\', mkey);
    RegEnumKey(mkey, 0, reg_str, 255);
    memo1.Lines.Add(reg_str);

    который, вроде бы, должен выдать первый подраздел hklm/software, выдает первый подраздел HKEY_Current_user. Кроме того, в HKCU создается пустой раздел с названием из какого-то символа юникода и не читаются полностью другие ветви реестра, в частности, HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\GameUX. С реестром, судя по всему, проблемы... с делфи 7 аналогично. Ни у кого похожего не наблюдалось?

    ОтветитьУдалить
  4. бегло глянул ... у меня этот код вообще под Win7 не запустился - выдал многозначительную ошибку Access Violation at address 00000000, чуть позже еще разок взляну - более пристально

    ОтветитьУдалить
  5. Этот комментарий был удален автором.

    ОтветитьУдалить
  6. проблема, возможно, в кодировках, используемых компилятором... Валерий, Вы на каком билде пробовали? сейчас попробую обновиться до 7100.

    ОтветитьУдалить
  7. Я пробовал на публичной beta-версии, точно не помню ее билд - 7000 по-моему.

    Не понял только про кодировки ...

    ОтветитьУдалить
  8. кодировки - возможно, неправильно записываются символы прямого и обратного слешей. насколько я помню, еще раздел создавался с именем "Microsoft\Windows\CurrentVersion\GameUX".
    P. S. билд 7100 - проблемы аналогичные. Работа с реестром - нивкакую... может, дело в изменившихся константах типа HKEY?

    ОтветитьУдалить
  9. Сомневаюсь насчет кодировок.

    А вот проблема с правами - запросто. Поскольку по-умолчанию ни в Висте ни в семерке доступ в раздел HKEY_LOCAL_MACHINE имеют только привелигерованные пользователи. Обычный пользователь имеет доступ только в HKEY_CURRENT_USER. Возможно из-за этого и такие проблемы?

    Попробуйте к разделу CURRENT_USER обращаться. У меня просто нет возможности сейчас проверить.

    ОтветитьУдалить
  10. Валерий, спасибо, действительно помогло) соотвественно, вопрос: можно ли получить соответсвующие права доступа?)

    ОтветитьУдалить
  11. По всей видимости проблема с правами вызвана включенным UAC. В моем предыдущем посте есть способ как его правильно настроить в приложении. Ну или в качестве проверки можно временно выключить его.

    Но думаю следует задуматься вот над каким вопросом: настолько ли критично записывать именно в HKLM, чтобы полностью гонять приложение с правами администратора? или заморачиваться с COM только ради этого?

    ОтветитьУдалить
  12. Вот всегда так... начнуть вопить: "MS отстой, да ничё не работает", а сами даже обработку ошибок в код вставить не удосужатся...

    ОтветитьУдалить
  13. Анонимный17 мая 2009 г., 19:46

    2GunSmoker: ошибок, как таковых, не происходит. При запросе из HKLM выдаются данные из HKCU. И уж тем более я не говорил подобное "MS отстой, да ничё не работает"
    Валерий, критично. Пишу программу для редактирования и добавления игр в game explorer.
    Попробую SetFileSecurity()

    ОтветитьУдалить
  14. Добавление манифеста запуска от администратора в приложение ни к чему не привело. Права на ветвь реестра выставлены. Пойду на форумы выяснять..

    ОтветитьУдалить
  15. Да, кстати, попробовал запустить программу, скомпилированную под 7, по хр - не работает! значит, дело в компиляторе.

    ОтветитьУдалить
  16. всё, нашел, если кому интересно:
    Работа с 64битным реестром
    [code delphi]
    procedure TForm1.FormCreate(Sender: TObject);
    const
    KEY_WOW64_32KEY = $200;
    KEY_WOW64_64KEY = $100;
    var
    org:tregistryEx;
    key: HKEY;
    begin
    org:=tregistryEx.Create;
    org.RootKey:=HKEY_LOCAL_MACHINE;
    RegOpenKeyEx(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows NT\CurrentVersion',
    0, KEY_ALL_ACCESS or KEY_WOW64_64KEY, key);
    org.SetCurrentKey(key);

    Edit1.Text:=org.ReadString('RegisteredOwner');
    Edit2.Text:=org.ReadString('RegisteredOrganization');
    [/code]

    ОтветитьУдалить
  17. Вот именно что - Windows 64х битная, а то сразу компилятор ругать. :) А 64х битный компилятор мы наверное только к пенсии дождемся :(

    Кстати вчера экспериментировал - иммено к этому ключу доступа небыло, даже HKLM\...\CurrentVersion\Run удалось прочитать.

    ОтветитьУдалить
  18. компилятор я не ругал, просто он не рассчитан на подобное) винда вообще при первом запуске предупреждала, что эта программа несовместима)

    ОтветитьУдалить
  19. Народ, ИМХО не стоит так извращаться. Уж если писать проги под Вынь 7 то лучше ставить заточенную под неё среду. Ибо Delphi 7 хотя и крут, морально устарел для этой ОС.

    ОтветитьУдалить
  20. Анонимный12 июня 2010 г., 0:12

    Все хорошо конечно, но - на Windows 7 в Делфи не получается регулировать громкость на компьютере((( Походу тоже что-то из-за доступа((( Подскажите как выйти из ситуации?

    ОтветитьУдалить
  21. Где достать Windows 7 Controls for Delphi? По ссылке не скачивается

    ОтветитьУдалить
  22. Delphi 5 + Win 7 (под Админом)
    При попытке залезть в опции проекта:
    Project >> Options...
    Получаем стандартное:
    Error
    Access violation at address ########.
    Write of address ########.

    Вопрос чёй-то так? Мигрировать с D5 желания нет, но есть проблема, под этот комп нет дров для XP...

    Как бы это победить?

    ОтветитьУдалить
  23. Дрова надо правильно искать. Берётся AIDA или EVEREST и по ID железки ищется драйвер. Некоторую проблему представляют ноутбучные вебкамеры и звуковые карты. Ну и неплохо перед инсталляцией дельфи поудалять все системные DLL из комлекта поставки - тогда и проблем совместимости небудет. Кроме того в семёрку встроен виртуалпц - можно и экспу поставить или 98.

    ОтветитьУдалить