Есть ли папка как в WinXP, так и в WinVista, к которой у всех пользователей есть права на запись?
-
09-06-2019 - |
Вопрос
У нас есть СЕТЕВОЕ приложение, которое устанавливается в папку Program Files.Само приложение записывает некоторые файлы и создает некоторые каталоги в свою папку приложения.Но когда обычный пользователь Windows пытается использовать наше приложение, оно выходит из строя, потому что у этого пользователя нет прав на запись в папку приложения.Есть ли какая-либо папка как в WinXP, так и в WinVista, к которой все пользователи имеют права на запись по умолчанию?Вся папка пользователя или что-то в этом роде?
Решение
Такой папки не существует.
Но вы можете его создать.
Существует CSIDL_COMMON_APPDATA, который в Vista сопоставляется с %ProgramData% (c:\ProgramData), а в XP сопоставляется с c:\Documents и Settings\AllUsers\Application Data
Не стесняйтесь создать там папку в вашем установщике и установить ACL, чтобы каждый мог записывать в эту папку.
Имейте в виду, что COMMON_APPDATA был реализован в версии 5 библиотеки common controls, что означает, что он доступен в Windows 2000 и более поздних версиях.В NT4 вы можете создать эту папку в своем каталоге установки, а в Windows 98 и ниже это в любом случае не имеет значения, поскольку в этих системах в любом случае нет системы разрешений.
Вот несколько примеров кода InnoSetup для создания этой папки:
[Dirs]
Name: {code:getDBPath}; Flags: uninsalwaysuninstall; Permissions: authusers-modify
[Code]
function getDBPath(Param: String): String;
var
Version: TWindowsVersion;
begin
Result := ExpandConstant('{app}\data');
GetWindowsVersionEx(Version);
if (Version.Major >= 5) then begin
Result := ExpandConstant('{commonappdata}\myprog');
end;
end;
Другие советы
Я не уверен, что существует единый путь, на запись по которому все пользователи, не являющиеся администраторами, имеют разрешение.
Я думаю, что правильным было бы <User>\Application Data