【问题标题】:Inno Setup - puts user files in admin documentsInno Setup - 将用户文件放入管理文档
【发布时间】:2016-11-05 00:53:25
【问题描述】:

我有几个 Windows 7 用户,当他们以自己的身份安装和登录时,他们被要求提供管理员密码。发生这种情况时,Inno Setup 会为该用户安装程序,但会将示例数据文件放在管理员的文档文件夹中。

如何确保 Inno Setup 将示例数据文件放置在用户的 Documents 文件夹中它们所属的位置?

[Files]
Source: "C:\dev\Installer Files\Chess Openings Wizard 2016\Game Trees\*.*";   DestDir: "{code:GetDataDir}\Game Trees";   Flags: uninsneveruninstall recursesubdirs

function GetDataDir(Param: String): String;
begin
  { Return the selected DataDir }
  Result := DataDirPage.Values[0];
end;

【问题讨论】:

    标签: inno-setup


    【解决方案1】:

    你的方法不正确。

    有两种正确的方法:

    1. 如果安装程序仅为当前(非特权)用户安装应用程序,则不需要管理员权限。

      PrivilegesRequired=lowest
      

      那么{userappdata} constant(和类似的)将正确地引用当前用户的文件夹。

    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

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


    话虽如此,您可以通过使用ExecAsOriginalUser function(或@987654341 中的runasoriginaluser flag)执行外部复制实用程序(copyxcopyrobocopy)来满足您的要求@ 部分)。

    ExecAsOriginalUser(
      'cmd.exe', '/c xcopy.exe "sourcefile" "%APPDATA%"',
      '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
    

    有关此方法的更多详细信息,请参阅类似问题 Inno Setup Creating registry key for logged in user (not admin user)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-10
      • 2022-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多