Как я заставляю свою программу работать в Windows Vista и Windows 7?

Мне записали приложение в Delphi 2006, который хорошо работал в Windows XP. Я упаковал приложение с помощью Установки Inno, с помощью Программных файлов в качестве папки по умолчанию. Несколько пользователей перемещены в Windows Vista и Windows 7. Проблема здесь - то, что приложение создает некоторые файлы в своей папке установки его собственным. Это работало в XP, но в Windows Vista у пользователей были проблемы с созданными файлами (они не появляются и так далее). После проверения сообщений пользователей я обнаружил КБ 927387: "Виртуализация общего файла и реестра выходит в Windows Vista или в Windows 7".

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

8
задан Rob Kennedy 4 January 2010 в 22:47
поделиться

5 ответов

Для Vista/Win7 ваше приложение не может поместить файлы в подпапку Program Files / Programs, если UAC не выключен или приложение не запущено как повышенное. Обратите внимание, что "повышенный" не обязательно означает "вход в систему от имени администратора". Пользователи, не являющиеся администраторами, могут подниматься на более высокий уровень, и Администратор не обязательно поднимается на более высокий уровень.

Если приложение пытается записать в программные файлы, но не поднимается на более высокий уровень, ОС либо заблокирует приложение, либо "виртуализирует" запись (поместит файлы куда-нибудь еще), в зависимости от того, как настроена конфигурация UAC. Ни то, ни другое не помогает приложению добиться успеха в том, что оно пыталось сделать.

Так что ему нужно поместить их куда-нибудь еще. Где зависит от того, зачем создаются файлы, а вы нам об этом не сказали. Вы можете прочитать эту статью , чтобы узнать об опциях. Обратите внимание, что в дополнение к пользовательским папкам AppData и Roaming, есть также профиль "All Users" (shared).

Наверное, вам стоит взглянуть на эту статью и скринкаст, в котором подробно обсуждается UAC с точки зрения Delphi.

.
12
ответ дан 5 December 2019 в 05:08
поделиться

Вам нужно переписать ваше приложение, чтобы оно хранило свои файлы в нужных местах, даже в XP, но особенно в Vista и далее, особенно если включена UAC. Это становится все более и более важным, так как Microsoft продолжает блокировать и внедрять свои модели безопасности с каждой новой версией операционной системы. Правила правильного управления файлами, связанными с приложениями и пользователями, описаны, например, в MSDN: "Спецификация приложений для Microsoft Windows 2000 для настольных приложений, Глава 4: Управление данными и настройками" и "Спецификация приложений для Microsoft Windows 2000 для настольных приложений Приложение A: лучшие практики" (да, они старые, но все еще весьма актуальны). Посмотрите на SHGetSpecialFolderLocation(), SHGetFolderPath(), SHGetKnownFolderPath() и другие связанные с ними функции, которые вам помогут.

.
13
ответ дан 5 December 2019 в 05:08
поделиться

Вот еще одна статья Зарко Гаджича, в которой показано, как получить различные системные каталоги. Также посмотрите на этот связанный вопрос.

.
3
ответ дан 5 December 2019 в 05:08
поделиться

У меня был аналогичный запрос здесь (Переполнение стека).

В конце концов, я понял, что мне нужно поместить мое приложение в Program Files во время установки (требуя UAC/elevation), а затем сохранить данные моего приложения в пользовательскую папку App Data. Мне нужно было изменить способ генерации параметров конфигурации "по умолчанию", а также место, где я сохранял этот материал, но в конце концов это стоило того - в итоге мы получили что-то, что отлично инсталлируется и работает на XP, Vista и Windows 7.

Единственное попадание UAC, которое мы получили, это во время установки, что для меня имеет смысл (и для Mac вы тоже получаете подобное попадание во время установки). У нас не было данных, которые были бы общими для всех пользователей в данном конкретном случае, но я бы посмотрел на специальную папку Program Data, если бы это было так.

Программа установки, которую мы используем (Setup Factory), сделала это довольно просто (мы просто написали небольшой код, чтобы обнаружить XP против Vista/Win7 и выбрать нужную специальную папку соответственно). Это было бы легко сделать и в Inno Setup, исходя из моего ограниченного опыта.

.
2
ответ дан 5 December 2019 в 05:08
поделиться

Файлы, которые Вы создаете для использования Вашим приложением, кроме как во время установки, должны переходить в каталог ProgramData, если он глобальный на рабочую станцию, или в каталог users ApplicationData, если он специфичен для пользователя.

В тех случаях, когда вы обязательно должны поместить файл в каталог программных файлов, вы можете использовать com для запроса высоты. Это подробно обсуждается , также доступны специфические для delphi биты . Один из примеров, который я использовал, это исправление в базе установки моих пользователей. Они предупреждены UAC о том, что система должна внести изменения, так что если вы делаете это в качестве автоматизированной задачи, вам, возможно, придется пересмотреть логику, чтобы быть более управляемыми пользователями

.
4
ответ дан 5 December 2019 в 05:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: