Где я могу записать данные, которые могут быть просмотрены и изменены всеми пользователями в Windows Vista? - PullRequest
2 голосов
/ 22 мая 2009

Мне нужно записать некоторые данные (для пробного использования / истечения срока действия), и мне нужно, чтобы приложение могло читать и записывать в это местоположение из учетной записи без прав администратора в Vista с включенным UAC.

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

Первоначально я рассматривал возможность записи в куст реестра KHEY_CURRENT_USER, но это будет уникальным для каждого пользователя.

Есть ли еще места?

Я пытался: % ALLUSERSPROFILE% \ TestDirectory

Но если NonAdmin1 создает и редактирует файл, то Admin1 не может сохранить файл после его изменения (хотя он может прочитать файл).

Ответы [ 2 ]

1 голос
/ 23 мая 2009

Об этом есть сообщение в блоге: blogs.msdn.com/cjacks/archive/2008/02/05/where-should-i-write-program-data-instead-of-program-files.aspx (я Мне не разрешено делать гиперссылки, вам придется вырезать и вставить до тех пор, пока она не будет исправлена).

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

Если вы хотите, чтобы файлы были открыты в Проводнике всеми пользователями, вы, вероятно, захотите поместить их в папку c: \ users \ public. Все, что вам нужно сделать, это поместить их в это место, и система безопасности по умолчанию должна работать.

Если вы хотите, чтобы файлы были скрыты от пользователей, вы, вероятно, захотите поместить их в c: \ programdata. В этом случае, когда вы создаете файлы, безопасность по умолчанию, вероятно, не правильная, поэтому вам нужно иметь ACL-файлы вашего приложения. Или, возможно, лучше, чтобы ваша программа установки создала структуру каталогов для вашего приложения в каталоге c: \ programdata, и программа установки установила хорошие ACL по умолчанию для каждого каталога - тогда ваше приложение не должно сожалеть о настройке ACL, когда оно на самом деле создает файлы, он просто должен создавать файлы в нужных местах.

Во всех случаях вы должны вызывать соответствующую функцию Win32 (или .Net Framework), чтобы получить путь к каталогу c: \ programdata или c: \ users \ public. Не жестко кодируйте эти пути в своем приложении - если вы жестко закодируете, вы пропустите случай, когда пользователь каким-то необычным образом переместил каталог или установил Windows, и ваше приложение сломается.

0 голосов
/ 22 мая 2009

Когда вы создаете файл или после его записи, я думаю, вы сможете изменить разрешения для группы «Пользователи», чтобы иметь больше доступа. Похоже, что «Владелец-создатель» получает полное разрешение, а группа «Пользователи» получает только чтение и выполнение.

Другим вариантом может быть создание каталога «TestDirectory» и настройка для группы «Пользователи» полного доступа во время установки.

...