Установите файлы в папку "Мои документы" исходного пользователя с помощью программы Inno Setup в Windows Vista/7.
В [Run]
раздел сценария установки Inno, есть флаг runasoriginaluser
это позволяет сценарию запускать процесс от имени исходного пользователя:
порожденный процесс будет выполняться с (обычно без повышенных прав) учетными данными пользователя, который изначально запустил программу установки (т. е. с учетными данными "pre-UAC dialog").
Есть ли эквивалентный флаг или обходной путь для {userdocs}
папка оболочки постоянная?
Это, очевидно, известное ограничение в Inno Setup (и других установщиках, как правило), но я надеюсь, что кто-то знает обходной путь.
Выдержка из файла справки Inno Setup:
Константы "пользователь" относятся к профилю пользователя, запустившего программу установки. Этот пользователь часто отличается от текущего пользователя, вошедшего в систему, поэтому используйте константы "пользователь" с осторожностью.
2 ответа
Обходной путь, к которому я пришел, - использование внешнего скрипта для выполнения копирования данных и вызов скрипта с использованием ExecAsOriginalUser
функция в wpReady
страница NextButtonClick
функция события.
Я предоставлю более подробную информацию, если кто-то заинтересован.
Ваш подход не верен.
Там два правильных способа:
Если установщик устанавливает приложение только для текущего (непривилегированного) пользователя, не требуйте прав администратора, установив
PrivilegesRequired
вlowest
:[Setup] PrivilegesRequired=lowest
Тогда "пользовательские" константы будут правильно ссылаться на папку текущего пользователя.
Если установщик устанавливает приложение для всех пользователей, не имеет смысла помещать некоторые файлы в папку одного конкретного пользователя. Файлы нужны всем пользователям, а не только одному. В этом случае рекомендуется установить файлы в общую папку, используя
{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 Создание раздела реестра для вошедшего в систему пользователя (не администратора).
Хотя, если установщик был запущен с повышенными правами (в отличие от самого подъема), вышеприведенное не сработает. И это не может работать в этом сценарии в любом случае. См. Как записать в каталог "Мои документы" пользователя с помощью установщика, когда пользователь использовал "Запуск от имени администратора". По этой причине придерживайтесь подходов, описанных выше.