Windows 7 将文件安装到原始用户';通过Windows Vista/7上的Inno安装程序设置“我的文档”文件夹

Windows 7 将文件安装到原始用户';通过Windows Vista/7上的Inno安装程序设置“我的文档”文件夹,windows-7,windows-vista,uac,inno-setup,Windows 7,Windows Vista,Uac,Inno Setup,在Inno安装脚本的[Run]部分,有一个标志runasoriginaluser,允许脚本以原始用户身份运行进程: 生成的进程将使用 (通常为非高架) 启动的用户的凭据 初始设置(即“预UAC 对话框“凭据”) 对于{userdocs}shell文件夹常量是否有等效的标志或解决方法? 这显然是Inno安装程序(以及其他安装程序)中的一个已知限制,但我希望有人知道解决方法 摘自Inno安装帮助文件: “用户”常量指的是 运行安装程序的用户的配置文件。 此用户通常与 当前已登录用户,请使用 注意“用

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

生成的进程将使用 (通常为非高架) 启动的用户的凭据 初始设置(即“预UAC 对话框“凭据”)

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

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

摘自Inno安装帮助文件:

“用户”常量指的是 运行安装程序的用户的配置文件。 此用户通常与 当前已登录用户,请使用 注意“用户”常量


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


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

您的方法不正确

有两种正确的方法:

  • 如果安装程序仅为当前(非特权)用户安装应用程序,则不需要管理员权限,方法是将设置为
    最低

    [Setup]
    PrivilegesRequired=lowest
    
    然后“用户”常量将正确引用当前用户的文件夹

  • 如果安装程序为所有用户安装应用程序,则将一些文件放在某个特定用户的文件夹中是没有意义的。所有用户都需要这些文件,而不仅仅是一个。在这种情况下,推荐的方法是使用(或类似)将文件安装到“公共”文件夹。并让应用程序在第一次运行时将文件复制到用户文件夹

    另见

  • 您还可以允许用户在这两种方法之间进行选择。

    有关其他类似问题,请参阅


    话虽如此,您可以使用(或
    [Run]
    部分中的)执行外部复制实用程序(,)

    ExecAsOriginalUser(
    “cmd.exe”,“/c xcopy.exe”源文件“%APPDATA%”,
    '',SW_HIDE,ewwaitunterminated,ResultCode);
    
    有关此方法的更多详细信息,请参见类似问题


    尽管如此,如果安装程序是直接从高处启动的(与提升本身相反),上述操作将不起作用。无论如何,它在这种情况下都无法工作。看见因此,请坚持上述方法。

    您希望在“我的文档”文件夹中安装哪些文件?我这样问是因为这不是一个通常用于安装文件的位置。从很多方面来说,这是一个非传统的安装。这是一个税收征收系统,大约有50个用户使用。我们每年发送几次程序更新(不需要将任何内容写入“我的文档”文件夹)。但是,我们每年需要发送两次更新的数据文件。偶尔我们会遇到一个新的税务员,他需要安装一个完整的程序(而不是更新)。在过去,我们有三个不同的过程来处理这些场景(数据文件更新、程序更新和程序安装)。我们正在尝试使用一个Inno安装程序“安装”来完成这三项工作。这种方法不起作用。我已经在这个问题中发布了原因。当安装程序正常运行时,该方法确实适用于该用户。当用户明确执行“以管理员身份运行”时,它会更改游戏。不过,最好还是练习一下。