Есть ли в Windows общая папка, в которую пользователи без прав доступа имеют права на запись? - PullRequest
6 голосов
/ 19 декабря 2010

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

Есть ли папка, которая используется совместнопользователи и любой пользователь без прав администратора могут писать в него?

Вот почему мне это нужно: мое приложение устанавливается в каталог PF программой установки Inno Setup с повышенными правами.Затем, когда фактический пользователь без прав администратора запускает программу, он копирует свои настройки в каталог AppData пользователя, используя другой установщик Inno Setup без повышенных прав.После деинсталляции программы (инициированной общесистемным установщиком с правами администратора) я хочу удалить файлы программы из каталога AppData каждого пользователя.

Я могу придумать два решения: 1. Получение списка Windowsпользователей и итерацию их каталогов AppData (кажется слишком сложным) 2. Сохранение путей к деинсталляторам в вышеупомянутом общем каталоге пользовательских данных.

Любые идеи?

Спасибо!

Ответы [ 4 ]

4 голосов
/ 23 октября 2011

Каталог «Общие документы» в Windows XP

C:\Documents and Settings\All Users\Documents

Или

%ALLUSERSPROFILE%\Documents

Соответствующий каталог в Vista / 7

C:\Users\Public

Или

%PUBLIC%\Documents

Но то, что вы действительно ищете, это значение KNOWNFOLDERID , равное FOLDERID_PublicDocuments (устаревшее CSIDL_COMMON_DOCUMENTS).Функция SHGetFolderPath может затем указать вам путь.

Или более простая альтернатива VBScript, но я не уверен, насколько это надежно для разных версий ОС:

Const CSIDL_COMMON_DOCUMENTS = &h2e 
Set oShell = CreateObject("Shell.Application")
Wscript.Echo oShell.Namespace(CSIDL_COMMON_DOCUMENTS).Self.Path

Я думаю, NameSpace не принимает этот конкретный постоянная .Таким образом, вы можете взять COMMONAPPDATA = &H23 и затем использовать его родителя.Но это не очень чисто или интернационализировано:

Wscript.Echo oShell.NameSpace(&h23).ParentFolder.Self.Path & "\Documents"

Но поскольку вы используете Inno Setup, вам действительно следует использовать {commondocs} Константа папки оболочки и упростить ее для себя.

2 голосов
/ 24 октября 2011

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

Я предлагаю вам создать папку под общими данными приложения (CSIDL_COMMON_APPDATA или FOLDERID_ProgramData) в вашем установщике с дескриптором безопасности, который предоставляет всем доступ.

* 1005 Е.Г. *

[Dirs]
Name: "{commonappdata}\productname";Permissions:everyone-modify;
1 голос
/ 21 декабря 2010

Будет ли содержимое в C: \ Users \ Public \ соответствовать требованиям?

0 голосов
/ 19 декабря 2010

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

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

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