Как установить несколько подкаталогов в ProgramFiles64Fororder с помощью WixSharp?

Я сделал 64-битный установщик WixSharp, который должен устанавливать файлы в двух разных каталогах в разделе «Program Files». Вот урезанная версия кода:

using System;
using WixSharp;
using File = WixSharp.File;

public class Script {

    public static void Main(string[] args) {
       var project =
           new Project("My Product",
               new Dir(@"%ProgramFiles%",
                   new Dir(@"SubDir1", new File(@"Files\test2.txt")),
                   new Dir(@"SubDir2", new File(@"Files\test2.txt"))
               ));

        project.Platform = Platform.x64;
        project.GUID = new Guid("6f330b47-2577-43ad-9095-1861ba25889b");    
        Compiler.BuildMsi(project);
}

}

Проблема в том, что подкаталоги будут созданы в "c:\%ProgramFiles64%\", а не в "c:\Program Files\".

Если я просто установлю один подкаталог, то каталог будет правильно установлен в "c:\Program Files".

Если я сделаю то же самое, не указав платформу как x64, файлы будут правильно находиться в папке «c:\Program Files (x86)».

Что я здесь делаю неправильно? Как я мог получить два каталога там.

Сначала я подозревал, что могу столкнуться с неправильной перегрузкой конструктора Dir, но поведение такое же, когда используется следующий код, чтобы убедиться, что он входит в конструктор Dir(string targetPath, params WixEntity[] items):

           new Dir(@"%ProgramFiles%",new WixEntity[] {
                new Dir(@"SubDir1", new File(@"Files\test2.txt")),
                new Dir(@"SubDir2", new File(@"Files\test2.txt"))
            }

person Jan Mattsson    schedule 02.12.2015    source источник


Ответы (1)


Я задал тот же вопрос на странице проектов Wix#, и Oleg_s ответил обходным решением и хорошим объяснением, почему это не сработало. Ответ здесь:

http://wixsharp.codeplex.com/discussions/648259#post1454338

person Jan Mattsson    schedule 03.12.2015
comment
Приведенная выше ссылка codeplex перемещена на github. Обходной путь, который сработал для меня, выглядит следующим образом: var project = new Project(MyApp, new Dir(C:\, new Dir(InstallOne, new DirFiles(E:\files_to_deploy*.*)), new Dir(InstallTwo, new DirFiles (E:\files_to_deploy*.*)) )); - person DevCod; 02.07.2018