Inno Setup - помещает пользовательские файлы в административные документы
У меня есть несколько пользователей Windows 7, которые при установке и вошли в систему как сами, просят предоставить пароль администратора. Когда это происходит, Inno Setup устанавливает программу для этого пользователя, но помещает образцы файлов данных в папку документов администратора.
Что можно сделать, чтобы Inno Setup поместил образцы файлов данных в папку "Документы" пользователя, где они находятся?
[Files]
Source: "C:\dev\Installer Files\Chess Openings Wizard 2016\Game Trees\*.*"; DestDir: "{code:GetDataDir}\Game Trees"; Flags: uninsneveruninstall recursesubdirs
function GetDataDir(Param: String): String;
begin
{ Return the selected DataDir }
Result := DataDirPage.Values[0];
end;
1 ответ
Ваш подход не верен.
Там два правильных способа:
Если установщик устанавливает приложение только для текущего (непривилегированного) пользователя, не требуйте прав администратора.
PrivilegesRequired=lowest
Тогда
{userappdata}
константа (и аналогичная) будет правильно ссылаться на папку текущего пользователя.Если установщик устанавливает приложение для всех пользователей, не имеет смысла помещать некоторые файлы в папку одного конкретного пользователя. Файлы нужны всем пользователям, а не только одному. В этом случае рекомендуется установить файлы в общую папку, используя
{commonappdata}
постоянный (или аналогичный). И пусть приложение скопирует файлы в папку пользователя при первом запуске.
Вы также можете позволить пользователю выбирать между этими двумя подходами.
См. Повышение привилегий запроса установщика Inno Setup только при необходимости.
Другие похожие вопросы смотрите
- Inno Setup Использование {localappdata} для вошедшего в систему пользователя
- Inno Setup всегда устанавливается в папку администратора AppData
Сказав это, вы можете сделать то, что вы просите, запустив утилиту внешнего копирования (copy
, xcopy
, robocopy
) с использованием ExecAsOriginalUser
функция (или runasoriginaluser
флаг в [Run]
раздел).
ExecAsOriginalUser(
'cmd.exe', '/c xcopy.exe "sourcefile" "%APPDATA%"',
'', SW_HIDE, ewWaitUntilTerminated, ResultCode);
Подробнее об этом подходе см. В аналогичном вопросе Inno Setup Создание раздела реестра для вошедшего в систему пользователя (не администратора).