16

我正在使用 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 文件夹中

例如 AppData\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] 部分来实现这一点?

谢谢

4

3 回答 3

24

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

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

{userappdata} & {commonappdata} 应用程序数据文件夹的路径。

 CSIDL_APPDATA = {userappdata} = C:\Documents and Settings\username\Application Data
 CSIDL_COMMON_APPDATA = {commonappdata} = C:\Documents and Settings\All Users\Application Data
于 2013-03-14T13:42:38.450 回答
5

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

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

{localappdata} :本地(非漫游)应用程序数据文件夹的路径。
{userappdata} & {commonappdata} :应用程序数据文件夹的路径。

我用 :

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

我的配置文件在:

C:\Users* \AppData\Roaming\MySoftware**

于 2018-05-25T12:33:35.457 回答
0

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

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

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

于 2014-02-03T10:33:29.457 回答