Установите файлы в папку «Мои документы» исходного пользователя с помощью программы Inno Setup в Windows Vista / 7. - PullRequest
1 голос
/ 10 декабря 2010

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 20 апреля 2017

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

Есть два правильных способа:

  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 Создание раздела реестра для вошедшего в систему пользователя (не администратора) .

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

0 голосов
/ 13 декабря 2010

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

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

...