Installshield Automation Interface - Всегда перезаписывать - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь автоматизировать создание инсталляционных пакетов для компании, в которой я работаю, и использую интерфейс автоматизации Installshield для создания проекта MSI.Одна из вещей, которые мы сделали до сих пор (вручную, если вы можете в это поверить), - это просмотреть все файлы, которые мы хотим выпустить, после импорта их в installshield и установить для них значение «Всегда перезаписывать» для папок за папками, так каккажется, вы не можете сделать это рекурсивно на родительской папке.При создании Basic MSI в графическом интерфейсе installshield это позволяет вам сделать это, однако при создании MSI через COM-объект эта опция доступна только для InstallScript, с которым я не могу создать MSI.

В любом случае, мой кодвроде как это

static void AddFiles(string[] aFiles, ISWiAuto24.ISWiProject oISProj, string sProjName, string ePackName) 
    {
        oISProj.OpenProject(sProjName, false);
        string installdirectory = "[ProgramFilesFolder]" + ePackName;
        oISProj.INSTALLDIR = installdirectory;
        Console.WriteLine("Adding ePack files");
        for (int i = 0; i < aFiles.Length;i++ )
            {
            Console.WriteLine(aFiles[i]);
            ISWiComponent NewComponent = oISProj.AddComponent("Component_"+i);
            string string_PathToFile = aFiles[i].Substring(0,aFiles[i].LastIndexOf("\\"));
            string string_RelativeToInstallDir = string_PathToFile.Substring(aFiles[i].LastIndexOf(ePackName) + ePackName.Length);
            NewComponent.Destination = installdirectory+string_RelativeToInstallDir ;
            NewComponent.AddFile(aFiles[i]);
            /*----------------------------Fails Here--------------------------------------*/
            NewComponent.OverwriteMainOptions=0;
            /*----------------------------------------------------------------------------*/
        }
        oISProj.SaveProject();
        oISProj.CloseProject();
        Console.WriteLine("Done");
    }
static voidMain(string[] args){
    ISWiAuto24.ISWiProject oISProj = new ISWiAuto24.ISWiProject();
    string ePackName = "ThisMonthsBundle"
    string[] aFiles = new[] {@"c:/Foo/Roo/Goo/"+ePackName+"/File0",@"c:/Foo/Roo/Goo/"+ePackName+"/File1",@"c:/Foo/Roo/Goo/"+ePackName+"/File2",@"c:/Foo/Roo/Goo/File3"}
    string sProjName = "C:/Foo/Bar.ism"
    oISProj.CreateProject(sProjName, ISWiProjectType.eptMsi);
    AddFiles(aFiles,oISProj,sProjName);
}

кто-нибудь знает способ обойти это?

ошибка: исключение COM не обработано - это свойство не поддерживается для базового проекта MSI.Вам нужно удалить строку, которая вызывает свойство, из вашего кода автоматизации.

1 Ответ

0 голосов
/ 20 сентября 2018

В 2010 году я нашел старое сообщение на форуме сообщества flexera, на котором разработчик flexera ответил пользователю, сказав, что это можно сделать так:

ISWiComponent NewComponent = oISProj.AddComponent("Component_1");
NewComponent.Destination = "[ProgramFilesFolder]" + "ProgramName";
NewComponent.AddFile("c:\File1");
ISWiFiles Files = NewComponent.ISWiFiles;
foreach (ISWiFile File in Files)
}
    File.OverrideSystemVersion = true;
    File.Version = "65535.0.0.0";
}

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

https://community.flexerasoftware.com/showthread.php?194448-installshield-2009-automation-File-property-quot-Always-overwrite-quot

В любом случае, вышеприведенное работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...