在Inno安装脚本的[Run]
部分中,有一个标记runasoriginaluser
,允许脚本以原始用户身份运行进程:
生成的进程将执行 (通常不提升) 已启动的用户的凭据 最初设置(即“UAC前” 对话框“凭证”。
{userdocs}
shell文件夹常量是否有等效的标记或解决方法?
这显然是Inno Setup(以及其他安装程序)的一个已知限制,但我希望有人知道解决方法。
摘自Inno Setup帮助文件:
“用户”常量指的是 运行安装程序的用户的配置文件 这个用户通常不一样 当前登录的用户,请使用 “用户”常量要谨慎。
答案 0 :(得分:0)
我提出的解决方法是使用外部脚本执行数据复制并使用ExecAsOriginalUser
事件函数的wpReady
页面中的NextButtonClick
函数调用脚本。 / p>
如果有人有兴趣,我会提供更多细节。
答案 1 :(得分:0)
您的方法不正确。
有两种正确的方法:
如果安装程序仅为当前(非特权用户)安装应用程序,则不要求管理员权限,方法是将PrivilegesRequired
设置为lowest
:
[Setup]
PrivilegesRequired=lowest
然后"用户"常量将正确引用当前用户的文件夹。
如果安装程序为所有用户安装应用程序,则将某些文件放入某个特定用户的文件夹中没有意义。所有用户都需要这些文件,而不仅仅是文件。在这种情况下,推荐的方法是将文件安装到" Common"文件夹,使用{commonappdata}
constant(或类似)。并让应用程序在第一次运行时将文件复制到用户文件夹。
您还可以允许用户在这两种方法之间进行选择 请参阅Make Inno Setup installer request privileges elevation only when needed。
关于其他类似问题,请参阅
话虽如此,您可以通过使用copy
(或{3}}执行外部复制实用程序(xcopy
,robocopy
,ExecAsOriginalUser
function),如您所发现的那样。 [Run]
部分中的runasoriginaluser
flag。
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'。因此,请坚持上述方法。