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

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

我有几个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;
inno-setup
1个回答
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'

您还可以允许用户在这两种方法之间进行选择。 见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)

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