Совместимость доменов: где должны быть записаны общие данные?
=============================================================

Мы написали приложение, которое довольно хорошо работает в XP, но имеет серьезные проблемы с миграцией на Vista и Windows 7, возможно, из-за того, где записываются пользовательские данные.

Вариант использования:
Отдельные пользователи должны войти в систему и использовать ее для сбора данных. Пользователи Supervisor должны иметь возможность смотреть через плечо отдельных пользователей и проверять, правильно ли они выполняют свою работу. Эти супервизоры также должны проверять системные журналы, чтобы убедиться, что система работает правильно.

Способ, которым мы выполняли эти задачи в XP, заключался в прямой записи в папку на диске C: \. Может быть, это плохая практика, может быть, это не так, но в основном все пользователи системы должны были иметь доступ к этим данным в качестве общих данных. В некоторых инсталляциях программы ситуация с ИТ была просто небезопасной, и на компьютере был один пользователь, а затем каждый человек входил в нашу программу отдельно. В других инсталляциях программы ИТ-персонал компетентен и имеет разные логины для разных пользователей, но каждый пользователь может по-прежнему иметь доступ к C: и каждый пользователь может при необходимости проверять других пользователей.

В Vista / Windows 7 все меняется. Если ИТ-персонал блокирует все для отдельных пользователей, эти пользователи все равно должны делиться этими общими данными, и запись параметров конфигурации конкретного приложения и списков пользователей в каталог приложения просто не разрешается. Если система находится в местоположении с доменом, то у пользователя нет прав локального администратора, и даже установка может стать проблемой.

Является ли решение этой проблемы установкой установщиком каталога, в который может писать каждый пользователь, а затем помещением всех пользовательских данных в этот каталог? Если так, возможно ли, чтобы установщик вел себя так (даже если ему должны быть предоставлены права администратора)? Или есть способ заставить Vista / 7 вести себя в более либеральной манере XP?

  ["Управление данными и настройками](https://msdn.microsoft.com/en-us/library/ms995853.aspx) в Спецификации приложения для каждой версии Windows в MSDN. Прочтите это, чтобы увидеть обоснование различных специальных папок, существующих в Windows, и узнать, как выбрать, в какую из них записывать данные.

 Далее, ваше приложение должно использовать [SHGetSpecialFolderLocation](https://msdn.microsoft.com/en-us/library/aa453706.aspx) API для получения путей к специальному месту.

 Папка, которая больше всего подходит для ваших нужд - быть записанной одним пользователем и прочитанной администраторами, будет`CSIDL_APPDATA` - что в Windows 6.X соответствует`C:\ProgramData\`

 По умолчанию права на папки, созданные в этом месте, предоставляют полный контроль администраторам и владельцам (т. Е. Пользователю, который их создал) и доступ только для чтения членам группы «Пользователи».

 Полностью отдельное упражнение - написание кода, необходимого для изменения списков контроля доступа (ACL) в каталогах. Тот, который будет необходим, если права по умолчанию на выбранном вами месте не подходят для ваших целей.



 твенный пользователь. Таким образом, он также может иметь свое собственное безопасное хранилище вдали от ваших пользователей. Это также устранило бы общую потребность в том, чтобы пользователь запустил программу с разрешениями вне своей обычной области.

 Фактическая часть вашего приложения в пользовательском пространстве может подключаться к службе и выполнять простые операции хранения / поиска.



 вы можете настроить безопасность только один раз, и его легче поддерживать. Руководители могут легко читать данные для многих компьютеров, и им не нужно посещать отдельные компьютеры ...



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

 Если ваша программа установки запускается с правами администратора, она может создать такой каталог и дать всем права на запись. Наиболее логичным местом было бы`ALLUSERSPROFILE` (`C:\Documents and Settings\All Users` на XP,`C:\Users\Public` в Vista / 7).

 Еще одно довольно простое решение - каждый пользователь просто входит в каталог в своем профиле, например, на`Application Data\Your App`. В этом случае вся информация о регистрации все еще может быть достаточно легко агрегирована административным приложением, и если разрешения на чтение не заблокированы, пользователи могут даже читать данные друг друга, если это необходимо.



 которым мы выполняли эти задачи в XP, заключался в прямой записи в папку на диске C: \. Может быть, это плохая практика, может быть, это не

 Это точно так. «C: \ Users \ Public \ Public Documents», где это уместно. Используйте списки управления доступом NTFS, чтобы контролировать, кто может читать и записывать файлы.