Inno Setup 安装到 AppData\Roaming Windows Vista/7 及更高版本,但应用程序数据安装在 Windows XP

Inno Setup Installing to AppData\Roaming on Windows Vista/7 and newer, but Application Data on Windows XP

我为 inDesign 制作了几个脚本。现在我想将它们全部分发到一个安装文件中。由于 inDesign 脚本驻留在 XP 和 Vista(或更高版本)的不同位置,我遇到了一些问题。我编译的设置在 Windows XP 下工作正常,但不会将任何内容复制到 Windows 7 AppData 文件夹。当我将文件夹从 AppData 更改为绝对路径时,它起作用了。

[Files]
Source: "Akruti Converter.jsx"; DestDir: "{userappdata}\Roaming\Adobe\InDesign\Version 8.0\en_US\Scripts\Scripts Panel\Unicode Converters\Plain"; Check: IsWindowsVista_or_7
Source: "Akruti Converter.jsx"; DestDir: "C:\Unicode Converters\Plain"
Source: "ShreeLipi v4,5,6 Converter.jsx"; DestDir: "{userappdata}\Roaming\Adobe\InDesign\Version 8.0\en_US\Scripts\Scripts Panel\Unicode Converters\Plain"; Check: IsWindowsVista_or_7
Source: "Smart Akruti Converter.jsx"; DestDir: "{userappdata}\Roaming\Adobe\InDesign\Version 8.0\en_US\Scripts\Scripts Panel\Unicode Converters\Smart"; Check: IsWindowsVista_or_7

Source: "Akruti Converter.jsx"; DestDir: "{userappdata}\Adobe\InDesign\Version 8.0\en_US\Scripts\Scripts Panel\Unicode Converters\Plain"; Check: IsWindowsXP
Source: "ShreeLipi v4,5,6 Converter.jsx"; DestDir: "{userappdata}\Adobe\InDesign\Version 8.0\en_US\Scripts\Scripts Panel\Unicode Converters\Plain"; Check: IsWindowsXP
Source: "Smart Akruti Converter.jsx"; DestDir: "{userappdata}\Adobe\InDesign\Version 8.0\en_US\Scripts\Scripts Panel\Unicode Converters\Smart"; Check: IsWindowsXP
[Code]

function IsWindowsXP: Boolean;
var
  Version: TWindowsVersion;
begin
  GetWindowsVersionEx(Version);
  Result := Version.NTPlatform and (Version.Major = 5) and (Version.Minor = 1);
end;

function IsWindowsVista_or_7: Boolean;
var
  Version: TWindowsVersion;
begin
  GetWindowsVersionEx(Version);
  Result := Version.NTPlatform and (Version.Major = 6) and ((Version.Minor = 1));
end;

The {userappdata} constant 在更新的 Windows Vista 上解析为 C:\Users\username\AppData\Roaming

因此 {userappdata}\Roaming 解析为 C:\Users\username\AppData\Roaming\Roaming,这(可能)不是您想要的。

在 Windows XP 上,{userappdata} 解析为 C:\Documents and Settings\username\Application Data(没有 Roaming)。

因此,我相信您可以在所有版本的 Windows 上使用 {userappdata},包括 XP,并获得预期的结果。您不需要带有 IsWindowsXPIsWindowsVista_or_7.

的条件条目

换句话说,我认为安装路径与 Windows XP 和 Windows 7 上的 相同。在这两种情况下,它都在 SHGetFolderPath(CSIDL_APPDATA) Inno Setup 中的 {userappdata} 是什么。

[Files]
Source: "Akruti Converter.jsx"; \
    DestDir: "{userappdata}\Adobe\InDesign\Version 8.0\en_US\Scripts\Scripts Panel\Unicode Converters\Plain"

旁注:您的 IsWindowsVista_or_7 仅实现为 "IsWindows7"。它不会 return 在 Windows Vista 上是正确的。它也应该 return 在 Windows 8/10 上为真。

如果您只参与分发,您可以考虑使用 Adob​​e AddOns 处理所有与平台相关的安装技术问题。