通过Windows Vista / 7上的Inno Setup将文件安装到原始用户的My Docs文件夹

问题描述 投票:1回答:2

在Inno Setup脚本的[Run]部分,有一个标志runasoriginaluser,允许脚本以原始用户身份运行进程:

生成的进程将使用最初启动安装程序的用户(通常是非提升的)凭据(即“UAC前对话框”凭据)执行。

{userdocs} shell文件夹常量是否有等效的标志或解决方法?

这显然是Inno Setup(以及其他安装程序)的一个已知限制,但我希望有人知道解决方法。

摘自Inno Setup帮助文件:

“用户”常量指的是运行安装程序的用户的配置文件。此用户通常与当前登录的用户不同,因此请谨慎使用“用户”常量。

windows-7 windows-vista uac inno-setup
2个回答
0
投票

我想到的解决方法是使用外部脚本执行数据复制并使用ExecAsOriginalUser事件函数的wpReady页面中的NextButtonClick函数调用脚本。

如果有人有兴趣,我会提供更多细节。


0
投票

你的方法不正确。

有两种正确的方法:

  1. 如果安装程序仅为当前(非特权用户)安装应用程序,则不要求管理员权限,方法是将PrivilegesRequired设置为lowest[Setup] PrivilegesRequired=lowest 然后“用户”常量将正确引用当前用户的文件夹。
  2. 如果安装程序为所有用户安装应用程序,则将某些文件放入某个特定用户的文件夹中是没有意义的。所有用户都需要这些文件,而不仅仅是文件。在这种情况下,建议的方法是使用{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 functionrunasoriginaluser 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'。因此,请坚持上述方法。

© www.soinside.com 2019 - 2024. All rights reserved.