[英]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
.您不需要带有IsWindowsXP
和IsWindowsVista_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
。
如果您只是为了分发,您可以考虑使用 Adobe AddOns 来处理所有与平台相关的安装技术方面。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.