我有几个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”文件夹.并让应用程序在第一次运行时将文件复制到用户文件夹.
您还可以允许用户在这两种方法之间进行选择.
见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).