AllFree Использовать или нет — вопрос не только религиозных предпочтений. Например у нас проект на BCB6 (размер исходников чуть меньше 3 гиг)… Так вот, тот веселый бородатый мужик из Embarcadero сказал мне удивительную вещь, что смысла портировать под новые среды разработки — нет, это имеет смысл только в том случае, если начат новый проект.
А режим совместимости НЕ НУЖЕН и даже вреден, если работает под текущим.
Kostantin-78
«тут» советуют я (или те, кто натолкнулся на то, что я писал)
Но в этом «тут» подлые мелкомягкие выпилили почти все, что я писал.
Install.cmd запускается из-под админа.
Зачем понадобился Unlocker — мне непонятно.
Если winhlp32.exe не запущен (скрипт этот процесс прибивает первым делом) — языковая обвязка не загружается/
Или у Вас что-то иное захватило файл (например вирус/антивирус)… .
Лайфхак. Важно удалять файловый поток «имяфайла:Zone.Identifier:$DATA» для файлов полученных по сети (ну, или прописывать в этот файл правильную циферку, иначе параноидальный UAC (даже отключенный) может попортить жизнь понизив NTFS права до уровня «Гость». Если удалять лень — входим в свойства файла и жмакаем кнопку «Разблокировать»
Скрипт делает следующее:
0. Если запущена ранее поставленная неправильная справка, то прекращает ее работу
1. Копирует файлы в правильные папки, если винда «из коробки» русскоязычная (нацлокаль ru-ru), то:
winhlp32.exe.mui в папки базовой и «национальной» локали
%SystemRoot%\en-US\winhlp32.exe.mui
и в
%SystemRoot%\ru-RU\winhlp32.exe.mui
winhlp32.exe и ftsrch.dll в %SystemRoot%\
%SystemRoot%\winhlp32.exe
%SystemRoot%\ftsrch.dll
2. Выставляет скопированным файлам NTFS права для текущего пользователя
3. Прописывает реестр согласно разрядности:
x32
ветка HKLM\SOFTWARE\Microsoft\WinHelp
поле AllowProgrammaticMacros тип DWORD значение 1
поле AllowIntranetAccess тип DWORD значение 1
x64
ветка HKLM\SOFTWARE\Microsoft\WinHelp
поле AllowProgrammaticMacros тип DWORD значение 1
поле AllowIntranetAccess тип DWORD значение 1
ветка HKLM\SOFTWARE\Wow6432Node\Microsoft\WinH elp
поле AllowProgrammaticMacros тип DWORD значение 1
поле AllowIntranetAccess тип DWORD значение 1
Вопрос
Имеем следующую проблему: SSO-агент блокирует запуск Delphi на одной из рабочих станций, а именно файлы delphi32.exe и install.exe: при запуске приложений без какого-либо перехвата окон появляется ошибка запуска приложения. Были предприняты следующие действия:
— удаление SSO-агента, результат — ошибка запуска исчезает, приложения запускаются;
— повторная установка SSO-агента, переименование файлов в delphi3232.exe и install123.exe, результат — ошибка запуска исчезает, приложения запускаются;
— переименование файла C:\Program Files (x86)\Indeed-ID\Enterprise SSO\IndeedID.SSO.black.list.dll в C:\Program Files (x86)\Indeed-ID\Enterprise SSO\IndeedID.SSO.black.list1.dll, результат — ошибка запуска исчезает, приложения запускаются.
ОС на рабочей станции: Windows Server 2008 R2 Standard SP1, на рабочей станции с ОС WinXP ситуация не повторяется.
Delphi версии 7
Ответ
Delphi запускается на Win 2008 R2, Win 7 x64 в режиме совместимости.
Для блокирования пользовательских приложений Indeed-Id Enterprise SSO использует механизм AppCertDlls, который позволяет регистрировать dll, которые экспортируют функцию CreateProcessNotify. Она и принимает решение о том, блокировать процесс или нет. В x64 окружении регистрируется 2 такие библиотеки (x86, x64) для блокировки приложений соответствующих типов.
И, при включении одновременно помощника по совместимости и механизма AppCertDlls в случае с Delphi происходит конфликт этих двух механизмов. Скорее всего речь идет о системной ошибке или же недокументированном моменте использования AppCertDlls в данном случае (хотя AppCertDlls сам по себе официально не документируется). Проявляется это следующим образом:
При наличии сколь-нибудь сложного кода (вызовы winapi, stl) в CreateProcessNotify() происходит сбой инициализации и старта процесса. Нашему коду управление не передается вовсе, дело не доходит даже до DllMain().
Если же код тривиален (сравнения и return’ы), то инициализация и старт происходят успешно.
При изменении имени исполняемого файла сигнатура приложения сбивается и ОС не воспринимает его как требующего особого режима совместимости. В этом случае все отрабатывает штатно.
Для проверки были сделаны тестовые AppCertDlls (32 и 64 бита), которые умеют только логгировать вызов своей функции. Результат был получен аналогичный, delphi начинает падать при регистрации в реестре тестовой x86 dll.
Экспортируемые функции описаны правильно, проблем со стеком быть не должно. Даже обойти это со своей стороны мы не можем, нам не передается управление.
Одним из возможных вариантов решения (кроме сбивания сигнатур исполняемых файлов) является ручное отключение SSO AppCertDlls. Сделать это можно в реестре, удалив значения из ключа HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\AppCertDlls
Вопрос
Мы выполнили удаление указанных Вами значений для Indeed-Id из реестра. Ошибка после этого не проявляется, Delphi запускается, но фактически эта операция, насколько я понимаю, аналогична процедуре переименования блэклиста.
Также в одной части объяснения Вы говорите о том, что конфликтует процесс запуска приложения в режиме совместимости и работа SSO-агента (используемого им механизма AppCertDlls), с другой стороны, Вы пишете о том, что SSO-агент не влияет на запуск Delphi.
Кроме того, проблема нерешаема с точки зрения Indeed-Id, так как затрагивает базовые механизмы, на которых основывается работа системы. Таким образом, если я Вас правильно понимаю, мы должны быть готовы к тому, что у всех пользователей, работающих с 64-битными системами, после установки клиентских частей Indeed-Id начнут падать все (или некоторые) приложения, запускаемые в режиме совместимости, и единственным выходом будет отключение блэклиста SSO, хотя SSO-агент не влияет на запуск приложений, приэтом мы не сможем использовать для таких пользователей блокировку запуска нежелательных приложений, так как отключим блэклист для того, чтобы запускались приложения в режиме совместимости. Или я Вас неправильно понимаю?
Также мы проверили запуск Delphi при включенном и отключенном режиме совместимости: результат один и тот же — без дополнительных действий (переименование запускаемых файлов, блэклиста, удаления агента или ключей в реестре) приложение не запускается.
Ответ
SSO-агент не влияет на запуск Delphi с точки зрения своей внутренней функциональности, его код блокировки нежелательных приложений не выполняется при падении и до падения Delphi. Delphi 7 не является приложением, совместимым с ОС Windows 2008 R2 Server и Windows 7, поэтому ОС обрабатывает запуск этого приложения особым образом, основываясь на сигнатуре исполняемого файла.
Я думаю, проблемы могут быть только с приложениями, несовместимыми с теми версиями ОС, которые используются у пользователей и о запуске которых ОС предупреждает особым образом (как и в случае с Delphi). Для запуска подобных приложений при наличии запущенного SSO агента у конечных пользователей можно либо сбивать сигнатуры исполняемых файлов (переименование), либо отключать блокировку запуска нежелательных приложений.
Delphi 7 and windows 10
#39758918 |
||
---|---|---|
Участник Откуда: Запорожье Сообщения: 56 486 Рейтинг: |
||
Есть ли официальная нота, что проги, скомпилированные на д7, работают или не работают на вин-10 и как работают … |
||
|
||
13.01.2019, 10:52 |
| Ответить | Цитировать | Написать
|
Delphi 7 and windows 10
#39758919 |
||
---|---|---|
andreymx Участник Откуда: Запорожье Сообщения: 56 486 Рейтинг: |
||
Гуглом искал, но официальных мессаджей не нашёл … |
||
|
||
13.01.2019, 10:53 |
| Ответить | Цитировать | Написать
|
Delphi 7 and windows 10
#39758923 |
||
---|---|---|
makhaon Участник Откуда: A galaxy far far away Сообщения: 3 972 Рейтинг: |
||
andreymx, Официальные меседжи будут про актуальные версии винды и сред. Во время d7, понятно, 10-ки не было еще даже в намеках. Чаще всего в windows совместимость софт вверх существует. Нужно совсем уж какую-то экзотику писать, что бы не работало. Писать, конечно же, нужно с учетом рекомендаций ms и появившегося uac’а и должно работать. … |
||
|
||
13.01.2019, 11:24 |
| Ответить | Цитировать | Написать
|
Delphi 7 and windows 10
#39758933 |
||
---|---|---|
Softologic Гость |
||
У меня два сравнительно больших проекта коммерческих, написаны на d7 — оба работают в точности также как и на win7, так и на winXP. … |
||
|
||
13.01.2019, 12:43 |
| Ответить | Цитировать | Написать
|
Delphi 7 and windows 10
#39758934 |
||
---|---|---|
Softologic Гость |
||
… В смысле на win10 работают также как и на win7, так и на winXP. … |
||
|
||
13.01.2019, 12:43 |
| Ответить | Цитировать | Написать
|
Delphi 7 and windows 10
#39758937 |
||
---|---|---|
Andy_OLAP Участник Откуда: я знаю, что Хапоэль Беэр-Шева — чемпион Сообщения: 2 080 Рейтинг: |
||
andreymxГуглом искал, но официальных мессаджей не нашёл … |
||
|
||
13.01.2019, 13:01 |
| Ответить | Цитировать | Написать
|
Delphi 7 and windows 10
#39758938 |
||
---|---|---|
andreymx Участник Откуда: Запорожье Сообщения: 56 486 Рейтинг: |
||
Softologic… В смысле на win10 работают также как и на win7, так и на winXP.да у меня тоже работают, делфи с ораклом 11 и фастом старым … |
||
|
||
13.01.2019, 13:07 |
| Ответить | Цитировать | Написать
|
Delphi 7 and windows 10
#39758942 |
||
---|---|---|
Фэйтл Эра Участник Сообщения: 631 Рейтинг: |
||
andreymxЕсть ли официальная нота, что проги, скомпилированные на д7, работают или не работают на вин-10 и как работают А «Win10» — это вообще не версия, это череда выпусков под общим названием. Как и WinXP, впрочем. … |
||
|
||
13.01.2019, 13:36 |
| Ответить | Цитировать | Написать
|
Delphi 7 and windows 10
#39758968 |
||
---|---|---|
Гирлионайльдо Участник Сообщения: 430 Рейтинг: |
||
Фэйтл Эра, Спасибо кэп, что пояснил за названия. Но имелась введу сама система, а версий данной системы как травы на земле. От выпуска к выпуску. У меня к примеру 10.0.17134 Н/Д построение 17134 а уже есть и новее, а сколько было до .. … |
||
|
||
13.01.2019, 14:42 |
| Ответить | Цитировать | Написать
|
Delphi 7 and windows 10
#39759028 |
||
---|---|---|
fraks Участник Откуда: Новосибирск Сообщения: 1 961 Рейтинг: |
||
andreymxЕсть ли официальная нота, что проги, скомпилированные на д7, работают или не работают на вин-10 и как работают У меня работают. Есть некоторые несовместимости, типа при format(‘%m’, []) символ валюты теперь юникодный, и не выводится. В остальном с проблемами не сталкивался. … |
||
|
||
13.01.2019, 18:40 |
| Ответить | Цитировать | Написать
|
Здравствуйте админ! На моём ноутбуке установлена Windows 10 и несколько раз в день выходит сообщение: «Oneclickstarter. Программа запущена в режиме совместимости. Настройки совместимости следует отключить, так как они могут приводить к нежелательным последствиям. Тем не менее запустить приложение?» Как избавиться от этого сообщения?
Как отключить режим совместимости Windows 10
Привет друзья! Данное сообщение в Windows 10 появляется из-за программы Tune Up Utilities 2014, так как она не совместима с операционной системой Windows 10, и если нажать на кнопку «Да», то сообщение пропадёт. Чтобы избавиться от этого сообщения и не нажимать постоянно «Да», попробуйте установить новейшую версию этого оптимизатора Windows — AVG PC TuneUp 2016.
Что такое — Режим совместимости Windows?
Данный режим обнаруживает и устраняет проблемы совместимости новейшей операционной системы с устаревшими приложениями, не имеющими драйверов для работы в новой Windows. Другими словами, если какая-либо старенькая программа не совместима с установленной у вас операционной системой Windows 10, но вы всё равно установили эту программу, то Windows 10 запустит её в так называемом режиме совместимости, то есть создаст среду, способствующую запуску этой устаревшей программы.
Хочу сказать, что иногда данный режим работает некорректно и устаревшая программа либо не запускается, либо работает с ошибками, либо выходит окно, как у нашего читателя. В этом случае лучше всего найти самую новую версию нужной вам программы (совместимую с Windows 10) и установить её, а если таковой нет, то можно попробовать то, что один раз сделал я, а именно — отключить режим совместимости Windows 10, в моём случае это помогло, то есть, перестало выходить окно с предупреждением, а устаревшее приложение работало как ни в чём не бывало.
Отключаем режим совместимости Windows 10
Пуск—>Выполнить, введите в поле ввода команду services.mscи нажмите «Ок».
Появляется окно управления службами. Находим службу помощника по совместимости программ. Видим, что служба выполняется.
Правой кнопкой мыши щёлкаем на этой службе и в контекстном списке выбираем «Остановить».
Служба останавливается.
Всё, служба помощника по совместимости программ остановлена до следующей перезагрузки.
Полное отключение режима совместимости программ в Windows 10
Для полного отключения режима совместимости программ в Windows 10, щёлкаем правой кнопкой мыши на службе помощника по совместимости программ и в контекстном списке выбираем «Свойства».
Вкладка «Общие», выберите Тип запуска ставим «Отключена» и жмём «ОК».
«Применить»
«ОК»
Всё, служба помощника по совместимости программ отключена.
Режим совместимости программ Windows 10 позволяет запускать ПО на компьютере, которое нормально работало только в предыдущих версиях Windows, а в последней ОС программа не запускается или работает с ошибками. В этой инструкции о том, как включить режим совместимости с Windows 8, 7, Vista или XP в Windows 10 для исправления ошибок запуска программ.
По умолчанию, Windows 10 после сбоев в программах предлагает автоматически включить режим совместимости, однако только в некоторых из них и не всегда. Ручное же включение режима совместимости, которое раньше (в предыдущих ОС) выполнялось через свойства программы или ее ярлыка, теперь доступно не для всех ярлыков и иногда требуется использовать специальное средство для этого. Рассмотрим оба способа. На сайте также присутствует отдельная инструкция про использование режима совместимости в Windows 11, в которой есть один дополнительный метод — редактор реестра, применимый и для Windows 10.
Включение режима совместимости через свойства программы или ярлыка
Первый способ включить режим совместимости в Windows 10 очень просто — кликните правой кнопкой мыши по ярлыку или исполняемому файлу программы, выберите пункт «Свойства» и откройте, если таковая обнаружится, вкладку «Совместимость».
Все, что останется сделать — задать параметры режима совместимости: указать версию Windows, в которой программа запускалась без ошибок. При необходимости, включите запуск программы от имени администратора или в режиме меньшего разрешения экрана и пониженной цветности (для совсем старых программ). Затем примените сделанные настройки. В следующий раз программа будет запущена с уже измененными параметрами.
Как включить режим совместимости программ с предыдущими версиями ОС в Windows 10 через устранение неполадок
Чтобы запустить настройку режима совместимости программ, потребуется запустить специальное средство устранения неполадок Windows 10 «Выполнение программ, предназначенных для предыдущих версий Windows».
Сделать это можно либо через пункт панели управления «Устранение неполадок» (панель управления можно открыть через правый клик по кнопке Пуск. Чтобы увидеть пункт «Устранение неполадок» вверху справа в поле «Просмотр» должно стоять «Значки», а не «Категории»), либо, что быстрее, через поиск в панели задач.
Запустится средство устранения проблем с совместимостью старых программ в Windows 10. Имеет смысл использовать пункт «Запуск от имени администратора» при его использовании (это позволит применить параметры к программам, находящимся в папках с ограниченным доступом). Нажмите «Далее».
После некоторого ожидания, в следующем окне будет предложено выбрать программу, с совместимостью которой есть проблемы. Если вам нужно добавить собственную программу (например, в списке не будут отображаться portable-приложения), выберите пункт «Нет в списке» и нажмите «Далее», после чего задайте путь к исполняемому exe файлу программы.
После выбора программы или указания ее расположения, будет предложено выбрать режим диагностики. Для ручного указания режима совместимости с конкретной версией Windows, нажмите «Диагностика программы».
В следующем окне будет предложено указать проблемы, которые были замечены при запуске вашей программы в Windows 10. Выбираем «Программа работала в предыдущих версиях Windows, но не устанавливается или не запускается сейчас» (или другие варианты, по ситуации).
В следующем окне потребуется указать, с какой версией ОС включить совместимость — Windows 7, 8, Vista и XP. Выберите свой вариант и нажмите «Далее».
В следующем окне, чтобы завершить установку режима совместимости, требуется нажать «Проверить программу». После ее запуска, проверки (которую вы выполняете сами, необязательно) и закрытия, нажмите «Далее».
И, в завершение, либо сохраните параметры совместимости для этой программы, либо используйте второй пункт, если ошибки остались — «Нет, попытаться использовать другие параметры». Готово, после сохранения параметров программа будет работать в Windows 10 в выбранном вами режиме совместимости.
Если у вас остались какие-либо вопросы, относящиеся к работе режима совместимости и вообще программ в Windows 10, задавайте, постараюсь помочь.