简体   繁体   English

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

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

I have made several scripts for inDesign.我为 inDesign 制作了几个脚本。 Now I want to distribute them all in a setup file.现在我想将它们全部分发到一个安装文件中。 Since inDesign scripts reside in different locations on XP and Vista (or above), I'm having some problems.由于 inDesign 脚本驻留在 XP 和 Vista(或更高版本)上的不同位置,我遇到了一些问题。 My compiled setup works fine under Windows XP but doesn't copy anything to Windows 7 AppData folder.我编译的设置在 Windows XP 下运行良好,但不会将任何内容复制到 Windows 7 AppData文件夹。 When I change folder from AppData to an absolute path, it works.当我将文件夹从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 resolves to C:\Users\username\AppData\Roaming on Windows Vista an newer. {userappdata}常量解析为C:\Users\username\AppData\Roaming在 Windows Vista 更新。

So {userappdata}\Roaming resolves to C:\Users\username\AppData\Roaming\Roaming , what is (probably) not what you want.所以{userappdata}\Roaming解析为C:\Users\username\AppData\Roaming\Roaming ,什么是(可能)不是你想要的。

On Windows XP, the {userappdata} resolves to C:\Documents and Settings\username\Application Data (no Roaming ).在 Windows XP 上, {userappdata}解析为C:\Documents and Settings\username\Application Data (无Roaming )。

Hence, I believe you can use {userappdata} on all versions of Windows, including XP, with desired results.因此,我相信您可以在包括 XP 在内的所有 Windows 版本上使用{userappdata}并获得所需的结果。 You do not need those conditional entries with IsWindowsXP and IsWindowsVista_or_7 .您不需要带有IsWindowsXPIsWindowsVista_or_7的那些条件条目。

In other words, I believe, the installation path is the same on Windows XP and Windows 7. In both cases it is under SHGetFolderPath(CSIDL_APPDATA) what is {userappdata} in Inno Setup.换句话说,我相信,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"

Side note: Your IsWindowsVista_or_7 is implemented as "IsWindows7" only.旁注:您的IsWindowsVista_or_7仅作为“IsWindows7”实现。 It won't return true on Windows Vista.它不会在 Windows Vista 上返回 true。 It should return true on Windows 8/10/11 too.它也应该在 Windows 8/10/11 上返回 true。

See IsWindowsVistaOrNewer in my answer to Determine Windows version in Inno Setup .请参阅我在 Inno Setup 中确定 Windows 版本的答案中的IsWindowsVistaOrNewer

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用Inno Setup在Windows(Vista / XP / 7)上安装服务 - Install a service on Windows (Vista/XP/7) using Inno Setup Inno安装程序:安装服务在Windows XP上不起作用 - Inno Setup: Installing service doesn't work on Windows XP 在 Windows XP 和 Inno Setup 中迭代 SWbemObjectSet - Iterate SWbemObjectSet in Windows XP and Inno Setup 仅当使用Inno Setup安装较新版本的应用程序时,才覆盖现有数据文件 - Overwrite existing data file only when installing a newer version of application with Inno Setup Inno Setup:生成的文件夹名称在Windows XP中有效,但在Windows 7中不可用 - Inno Setup: Generated folder name works in Windows XP but not Windows 7 Windows XP 上的 Inno Setup 安装程序提供“无效的 win32 应用程序” - Inno Setup installer on Windows XP gives "not a valid win32 application" Inno Setup不会在Windows XP上弹出带有PrivilegesRequired = none的UAC提示 - Inno Setup does not popup UAC prompt on Windows XP with PrivilegesRequired=none 如何指示 Inno Setup 仅在 Windows XP 上安装某些文件? - How to instruct Inno Setup to install certain files on Windows XP only? 使用 Inno Setup 和 node-windows 脚本将节点应用程序安装为服务的问题 - Issue with installing node application as a service using Inno Setup and node-windows script Inno Setup for Windows 服务? - Inno Setup for Windows service?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM