inno-setup – 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;

解决方法

你的方法不正确.

有两种正确的方法:

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

PrivilegesRequired=lowest

然后{userappdata} constant(和类似的)将正确引用当前用户的文件夹.
>如果安装程序为所有用户安装应用程序,则将某些文件放入某个特定用户的文件夹中是没有意义的.所有用户都需要这些文件,而不仅仅是文件.在这种情况下,建议的方法是使用{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.

对于其他类似的问题,请参阅

> Inno Setup Using {localappdata} for logged in user
> Inno Setup always installs into admin’s AppData directory

话虽如此,您可以通过使用ExecAsOriginalUser function(或[运行]部分中的runasoriginaluser flag)执行外部复制实用程序(copy,xcopy,robocopy)来执行您要求的操作.

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

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

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...