Динамически включать файлы в настройку MSI - PullRequest
2 голосов
/ 28 января 2010

Я пытаюсь развернуть несколько файлов в каталоге в моей настройке MSI. Поскольку файлы будут часто меняться, я не хочу добавлять файлы напрямую, но вместо этого имею возможность автоматически включать все файлы из каталога и развертывать их в определенном месте.

Я использую проект установки Visual Studio.

Кто-нибудь знает, как / если это возможно?

Ответы [ 4 ]

1 голос
/ 04 апреля 2010

Я решил проблему обходным путем:

  • Добавление действия сборки для упаковки всего каталога (может быть отфильтровано) в ZIP-файл.
  • Добавить ссылку на пустой ZIP-файл в проект развертывания.
  • Добавление настраиваемого действия в проект развертывания для извлечения ZIP-файла в папку назначения.

Это просто и стабильно.

0 голосов
/ 23 июля 2015

выберите путь к папке и перейдите к этому методу. Он создаст MSI-файл в порядке, в котором существует иерархия папок.

открытый класс InstallData { public void GetWixData (строка SourcePath) { пытаться { WixEntity [] weDir = new WixEntity [0]; weDir = BuildDirInfo (SourcePath, weDir);

            var project = new Project("My Product", new Dir("MyDB", weDir), new ManagedAction("MyAction"))
            {
                GUID = Guid.NewGuid(),
                UI = WUI.WixUI_InstallDir,
                Manufacturer = "xxx Inc.",

            };



            try
            {



                Compiler.BuildMsi(project, Application.StartupPath);
            }

            catch (Exception ex)
            {
            }

        }

        catch (Exception Ex)
        {

        }
    }


    private WixEntity[] BuildDirInfo(string sRootDir, WixEntity[] weDir)
    {
        DirectoryInfo RootDirInfo = new DirectoryInfo(sRootDir);
        if (RootDirInfo.Exists)
        {
            DirectoryInfo[] DirInfo = RootDirInfo.GetDirectories();
            List<string> lMainDirs = new List<string>();
            foreach (DirectoryInfo DirInfoSub in DirInfo)
                lMainDirs.Add(DirInfoSub.FullName);
            int cnt = lMainDirs.Count;
            weDir = new WixEntity[cnt + 1];
            if (cnt == 0)
                weDir[0] = new DirFiles(RootDirInfo.FullName + @"\*.*");
            else
            {
                weDir[cnt] = new DirFiles(RootDirInfo.FullName + @"\*.*");
                for (int i = 0; i < cnt; i++)
                {
                    DirectoryInfo RootSubDirInfo = new DirectoryInfo(lMainDirs[i]);
                    if (!RootSubDirInfo.Exists)
                        continue;
                    WixEntity[] weSubDir = new WixEntity[0];
                    weSubDir = BuildDirInfo(RootSubDirInfo.FullName, weSubDir);
                    weDir[i] = new Dir(RootSubDirInfo.Name, weSubDir);
                }
            }
        }


        return weDir;
    }
}

открытый класс CustomActions { [CustomAction] public static ActionResult MyAction (сеанс сеанса) { MessageBox.Show («Hello World!», «Embedded Managed CA»); session.Log («Начни MyAction Hello World»);

       return ActionResult.Success;
   }

}

0 голосов
/ 02 февраля 2010

Я сделал это в NSIS, сгенерировав часть моего сценария NSIS на Perl и имея основной сценарий, который включал динамический сценарий.

Краткий ответ: это определенно возможно.

0 голосов
/ 01 февраля 2010

Используя что ????

WiX? InstallShield? Visual Studio? WISE? InstallAware? MSI Factory? Какой-нибудь другой инструмент Windows Installer?

  • InstallShield - да. Добавьте «динамическую папку» в ваши настройки.
  • WiX - вид. Используйте heat для генерации (частичных) источников WiX перед вызовом свечи / источника света.
...