【问题标题】:Inno Setup Installing to AppData\Roaming on Windows Vista/7 and newer, but Application Data on Windows XPInno Setup 在 Windows Vista/7 和更新版本上安装到 AppData\Roaming,但在 Windows XP 上安装应用程序数据
【发布时间】:2025-06-19 19:05:01
【问题描述】:

我为 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;

【问题讨论】:

    标签: inno-setup appdata userappdatapath


    【解决方案1】:

    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)。

    因此,我相信您可以在包括 XP 在内的所有 Windows 版本上使用 {userappdata},并获得所需的结果。您不需要带有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”实现。它不会在 Windows Vista 上返回 true。它也应该在 Windows 8/10 上返回 true。

    【讨论】:

    • 非常感谢!由于 InnoSetup 帮助文件中的文件夹常量列出了 Vista 和更新版本的非漫游应用程序数据文件夹,我认为可能是这种情况。你解开了我的疑惑。是的,我正在修改“IsWindowsVista_or_7”并忘记添加我已删除的 Version.Minor = 0。
    • 正确的代码只是Result := (Version.Major >= 6);,意思是“Windows Vista (6.0) 和更新版本”。但同样,您根本不需要此代码,只需使用 {userappdata}
    【解决方案2】:

    如果您只是为了分发,您可以考虑使用 Adob​​e 插件来处理所有与平台相关的安装技术方面的问题。

    【讨论】:

    • 谢谢。我会调查的!
    最近更新 更多