Inno Setup Установка в AppData\Roaming в Windows Vista/7 и новее, но данные приложения в 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;

2 ответа

Решение

{userappdata} постоянная разрешается в C:\Users\username\AppData\Roaming в Windows Vista новее.

Так {userappdata}\Roaming решает в C:\Users\username\AppData\Roaming\Roaming что (вероятно) не то, что вы хотите.

В Windows XP {userappdata} решает в C:\Documents and Settings\username\Application Data (нет Roaming).

Следовательно, я считаю, что вы можете использовать {userappdata} на всех версиях Windows, включая XP, с желаемыми результатами. Вам не нужны эти условные записи с IsWindowsXP а также IsWindowsVista_or_7,

Другими словами, я считаю, что путь установки одинаков в Windows XP и Windows 7. В обоих случаях он находится под SHGetFolderPath(CSIDL_APPDATA) что такое {userappdata} в Inno Setup.

[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.

Если вы занимаетесь только дистрибуцией, вы можете рассмотреть возможность использования Adobe AddOns, которая будет касаться всех технических аспектов установки, связанных с платформой.

Другие вопросы по тегам