我有几个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。
对于其他类似的问题,请参阅
话虽如此,你可以通过使用copy
(或xcopy
部分中的robocopy
)执行外部复制实用程序(ExecAsOriginalUser
function,runasoriginaluser
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)。