使用inno-setup在用户AppData文件夹中安装文件

时间:2013-03-14 12:48:33

标签: inno-setup

我正在使用Inno-Setup版本5.5.3(a)。

[Files]
Source: "C:\GPT\GPT.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\GPT\GPT.dat"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

我想将“GPT.dat”文件安装到名为“GPT”的自定义文件夹中的用户AppData文件夹中

e.g。应用程序数据\ GPT \

例如,在我的delphi代码中,我在用户AppData路径中创建了一个名为“GPT”的文件夹。这是我想放置文件的地方

var
  path: array[0..MAX_PATH] of char;

 SHGetFolderPath(0, CSIDL_APPDATA, 0, SHGFP_TYPE_CURRENT, @path);
 userPath:= Path;
 UserPath:= UserPath + '\GPT\';
 if not DirectoryExists(UserPath) then
   CreateDir(UserPath);

有谁能告诉我如何编辑我的Inno脚本的[Files]部分才能实现这一目标?

由于

3 个答案:

答案 0 :(得分:15)

您需要将{userappdata}常量(仅映射到CSIDL_APPDATA项ID)用作文件的目标目录:

[Files]
Source: "C:\GPT\GPT.dat"; DestDir: "{userappdata}\GPT\"; Flags: ignoreversion createallsubdirs recursesubdirs comparetimestamp

{userappdata}& {} commonappdata Application Data文件夹的路径。

 CSIDL_APPDATA = {userappdata} = C:\Documents and Settings\username\Application Data
 CSIDL_COMMON_APPDATA = {commonappdata} = C:\Documents and Settings\All Users\Application Data

答案 1 :(得分:1)

您需要使用:{userappdata}
如果您查看Inno Setup文档:

{userappdata} = C:\Documents and Settings\username\AppData\Roaming\
{commonappdata} = C:\Documents and Settings\All Users\AppData\Roaming\

{localappdata}:本地(非漫游) Application Data文件夹的路径。
{userappdata}& {commonappdata}:Application Data文件夹的路径。

我用:

[Files]
Source: MyPath\* ;  Flags: recursesubdirs createallsubdirs; DestDir: {userappdata}\MySoftware\ ; Components: ConfigFiles

我的配置文件位于:

<强> C:\用户* \应用程序数据\漫游\ MySoftware **

答案 2 :(得分:0)

如果我正确地解释Mirals评论,那么使用{programdata}似乎更合适。

然而,在XP上没有{programdata},只有{commonappdata}或{userappdata},所以我必须使我的安装多样化。 {programdata}是后来的发明。

一个令人不安的陷阱是桌面和userappdata被镜像到服务器(“漫游配置文件”),如果他们使用userappdata进行ini文件存储,这会大大减慢程序,至少这是我的经验。