我有一些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;
答案 0 :(得分:0)
您的方法不正确。
有两种正确的方法:
如果安装程序仅为当前(非特权用户)安装应用程序,则不需要管理员权限。
PrivilegesRequired=lowest
然后{userappdata}
constant(和类似的)将正确引用当前用户的文件夹。
如果安装程序为所有用户安装应用程序,则将某些文件放入某个特定用户的文件夹中没有意义。所有用户都需要这些文件,而不仅仅是文件。在这种情况下,建议的方法是使用{commonappdata}
constant(或类似)将文件安装到“Common”文件夹。并让应用程序在第一次运行时将文件复制到用户文件夹。
您还可以允许用户在这两种方法之间进行选择 请参阅Make Inno Setup installer request privileges elevation only when needed。
关于其他类似问题,请参阅
说完之后,您可以使用copy
(或xcopy
执行外部复制实用程序(robocopy
,ExecAsOriginalUser
function,runasoriginaluser
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}}。