Как записать в каталог Мои документы пользователя с помощью установщика, когда пользователь использовал "Запуск от имени администратора"
У меня есть программа, которая должна создавать файлы в каталоге My Document при установке. Это строго фиксированное требование, его нельзя изменить. Проблема заключается в том, что если пользователь запускает "Запуск от имени администратора" в файле установки, постоянная innosetups {userdocs} указывает на каталог документов администратора, а не на исходный зарегистрированный пользователь.
Итак, погуглил и нашел вот это:
Ответ, однако, неверен, потому что innosetup даже утверждает, что
Если пользователь запускает программу установки, щелкнув правой кнопкой мыши его EXE-файл и выбрав "Запуск от имени администратора", этот флаг, к сожалению, не будет действовать, поскольку программа установки не имеет возможности запускать какой-либо код с исходными учетными данными пользователя. То же самое верно, если программа установки запущена из процесса с повышенными правами. Обратите внимание, однако, что это не ограничение Inno Setup; В таких случаях установщики на основе установщика Windows не могут вернуться к исходным учетным данным пользователя.
Я полагаю, что могу побудить пользователя не использовать "Запуск от имени администратора", но я не знаю, как предотвратить его повышение.
Я думал о том, чтобы программа сама установила каталог My Documents\Program name при первом запуске (после установки). Будет ли этот обходной путь работать? Он должен будет копировать файлы из своего каталога программных файлов как потенциально ограниченный пользователь. Это возможно, или я столкнусь с проблемами привилегий?
3 ответа
Ответ на оригинал действителен, но не рекомендуется. Когда установка запущена, RunAsOriginalUser
будет работать как пользователь, вошедший в Windows. Это достигается тем, что часть установки запускается без изменений, а затем запускается другая копия с повышенными правами для выполнения фактической установки.
Когда пользователь явно выполняет "Запуск от имени администратора", "незатронутая заглушка" также запускается с повышенными правами, и в этом случае программа установки ничего не может сделать, чтобы получить доступ к исходному пользователю, поскольку эта информация уже была заменена.
Общепринятая практика заключается в том, чтобы выполнять любую работу с профилем в самом приложении, как вы предложили, что также означает, что оно будет работать для других пользователей и в среде LUA в pre Vista (где у вас была бы точно такая же ситуация, с которой вы сталкиваетесь). сейчас).
Во-первых, убедитесь, что установщик не будет требовать повышения привилегий самостоятельно, установив PrivilegesRequired=lowest
:
[Setup]
PrivilegesRequired=lowest
Чтобы прервать установщик, когда установщик явно запускает "От имени администратора" пользователем в Windows Vista и более ранних версиях, используйте IsAdminLoggedOn
в InitializeSetup
:
[Code]
function InitializeSetup(): Boolean;
begin
Result := True;
if (GetWindowsVersion >= $05010000) and
IsAdminLoggedOn then
begin
MsgBox('Do not run this installer "As Administrator".', mbError, MB_OK);
Result := False;
end;
end;
Дополнительные сведения по этой теме см. В разделе " Установка файлов в папку" Мои документы "исходного пользователя с помощью программы установки Inno в Windows Vista/7".
Эта статья может дать вам несколько советов о том, как обойти высоту,
http://www.codeproject.com/Articles/18946/High-elevation-can-be-bad-for-your-application-How
Вообще говоря, это дает вам возможность выполнить ваш исполняемый файл (который создает файлы в разделе Мои документы) в конце установки без повышения прав.