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 ответ

Ваш подход не верен.

Там два правильных способа:

  1. Если установщик устанавливает приложение только для текущего (непривилегированного) пользователя, не требуйте прав администратора.

    PrivilegesRequired=lowest
    

    Тогда {userappdata} константа (и аналогичная) будет правильно ссылаться на папку текущего пользователя.

  2. Если установщик устанавливает приложение для всех пользователей, не имеет смысла помещать некоторые файлы в папку одного конкретного пользователя. Файлы нужны всем пользователям, а не только одному. В этом случае рекомендуется установить файлы в общую папку, используя {commonappdata} постоянный (или аналогичный). И пусть приложение скопирует файлы в папку пользователя при первом запуске.

    См. Также Как записать в каталог "Мои документы" пользователя с помощью установщика, когда пользователь использовал "Запуск от имени администратора".

Вы также можете позволить пользователю выбирать между этими двумя подходами.
См. Повышение привилегий запроса установщика Inno Setup только при необходимости.

Другие похожие вопросы смотрите


Сказав это, вы можете сделать то, что вы просите, запустив утилиту внешнего копирования (copy, xcopy, robocopy) с использованием ExecAsOriginalUser функция (или runasoriginaluser флаг в [Run] раздел).

ExecAsOriginalUser(
  'cmd.exe', '/c xcopy.exe "sourcefile" "%APPDATA%"',
  '', SW_HIDE, ewWaitUntilTerminated, ResultCode);

Подробнее об этом подходе см. В аналогичном вопросе Inno Setup Создание раздела реестра для вошедшего в систему пользователя (не администратора).

Другие вопросы по тегам