Я пытаюсь автоматизировать создание инсталляционных пакетов для компании, в которой я работаю, и использую интерфейс автоматизации 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.Вам нужно удалить строку, которая вызывает свойство, из вашего кода автоматизации.