Inno Setup - 将用户文件放入管理文档中

时间:2016-11-05 00:53:25

标签: inno-setup

我有一些Windows 7用户在安装和登录时会被要求提供管理员密码。发生这种情况时,Inno Setup会为该用户安装该程序,但它会将示例数据文件放在Admin的文档文件夹中。

如何确保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;

1 个答案:

答案 0 :(得分:0)

您的方法不正确。

有两种正确的方法:

  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'

  3. 您还可以允许用户在这两种方法之间进行选择 请参阅Make Inno Setup installer request privileges elevation only when needed

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

    说完之后,您可以使用copy(或xcopy执行外部复制实用程序(robocopyExecAsOriginalUser functionrunasoriginaluser flag)来执行您要求的操作。 [Run]部分中的Inno Setup Creating registry key for logged in user (not admin user)

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

    有关此方法的更多详细信息,请参阅类似问题{{3}}。