Установите файлы в папку "Мои документы" исходного пользователя с помощью программы Inno Setup в Windows Vista/7.

В [Run] раздел сценария установки Inno, есть флаг runasoriginaluser это позволяет сценарию запускать процесс от имени исходного пользователя:

порожденный процесс будет выполняться с (обычно без повышенных прав) учетными данными пользователя, который изначально запустил программу установки (т. е. с учетными данными "pre-UAC dialog").

Есть ли эквивалентный флаг или обходной путь для {userdocs} папка оболочки постоянная?

Это, очевидно, известное ограничение в Inno Setup (и других установщиках, как правило), но я надеюсь, что кто-то знает обходной путь.

Выдержка из файла справки Inno Setup:

Константы "пользователь" относятся к профилю пользователя, запустившего программу установки. Этот пользователь часто отличается от текущего пользователя, вошедшего в систему, поэтому используйте константы "пользователь" с осторожностью.

2 ответа

Решение

Обходной путь, к которому я пришел, - использование внешнего скрипта для выполнения копирования данных и вызов скрипта с использованием ExecAsOriginalUser функция в wpReady страница NextButtonClick функция события.

Я предоставлю более подробную информацию, если кто-то заинтересован.

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

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

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

    [Setup]
    PrivilegesRequired=lowest
    

    Тогда "пользовательские" константы будут правильно ссылаться на папку текущего пользователя.

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

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

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

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


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

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

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

Хотя, если установщик был запущен с повышенными правами (в отличие от самого подъема), вышеприведенное не сработает. И это не может работать в этом сценарии в любом случае. См. Как записать в каталог "Мои документы" пользователя с помощью установщика, когда пользователь использовал "Запуск от имени администратора". По этой причине придерживайтесь подходов, описанных выше.

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