Installshield自动化接口-始终覆盖

时间:2018-09-19 11:28:45

标签: c# automation com release installshield

我正在尝试为我工作的公司自动创建安装软件包,并正在使用Installshield自动化界面创建MSI项目。到目前为止,我们要做的一件事(通常是,如果您可以相信的话)是将要导入的所有文件都导入installshield并将它们设置为“始终覆盖”后逐个文件夹进行浏览,似乎您不能在父文件夹上递归执行此操作。在installshield GUI上创建基本MSI时,您可以执行此操作,但是,通过COM对象创建MSI时,此选项仅适用于我无法创建MSI的InstallScript。

我的代码有点像这样的人

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异常-Basic MSI Project不支持此属性。您需要从自动化代码中删除调用该属性的行。

1 个答案:

答案 0 :(得分:0)

我在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

无论如何,以上似乎可行