在Inno Setup脚本的[Run]
部分,有一个标志runasoriginaluser
,允许脚本以原始用户身份运行进程:
生成的进程将使用最初启动安装程序的用户(通常是非提升的)凭据(即“UAC前对话框”凭据)执行。
{userdocs}
shell文件夹常量是否有等效的标志或解决方法?
这显然是Inno Setup(以及其他安装程序)的一个已知限制,但我希望有人知道解决方法。
摘自Inno Setup帮助文件:
“用户”常量指的是运行安装程序的用户的配置文件。此用户通常与当前登录的用户不同,因此请谨慎使用“用户”常量。
我想到的解决方法是使用外部脚本执行数据复制并使用ExecAsOriginalUser
事件函数的wpReady
页面中的NextButtonClick
函数调用脚本。
如果有人有兴趣,我会提供更多细节。
你的方法不正确。
有两种正确的方法:
PrivilegesRequired
设置为lowest
:
[Setup]
PrivilegesRequired=lowest
然后“用户”常量将正确引用当前用户的文件夹。{commonappdata}
constant(或类似文件)将文件安装到“Common”文件夹。并让应用程序在第一次运行时将文件复制到用户文件夹。
另见How to write to the user's My Documents directory with installer when the user used 'Run As Administrator'。您还可以允许用户在这两种方法之间进行选择。 见Make Inno Setup installer request privileges elevation only when needed。
对于其他类似的问题,请参阅
话虽如此,你可以像你发现自己一样,使用copy
(或xcopy
部分中的robocopy
)执行外部复制实用程序(ExecAsOriginalUser
function,runasoriginaluser
flag,[Run]
)。
ExecAsOriginalUser(
'cmd.exe', '/c xcopy.exe "sourcefile" "%APPDATA%"',
'', SW_HIDE, ewWaitUntilTerminated, ResultCode);
有关此方法的更多详细信息,请参阅类似的问题Inno Setup Creating registry key for logged in user (not admin user)。
但是,如果安装程序立即开始升高(与提升本身相反),则上述操作无效。无论如何,它无法在这种情况下工作。见How to write to the user's My Documents directory with installer when the user used 'Run As Administrator'。因此,请坚持上述方法。