Michael Urman
我有InstallShield 2013 Basic MSI项目我想拥有一个将在安装文件后运行的CA,但是在创建快捷方式之前,我该怎么做?我尝试创建将在InstallFile之后运行的CA,但是在运行安装程序时,我看到当它进入InstallInitialize时,它会跳过除我添加的CA之外的所有CA并运行它,然后返回InstallInitialize并运行其具有的所有自定义操作跳过。
您在日志中看到的是InstallExecuteSequence中Deferred Execution操作的效果。在遇到InstallExecute
和InstallFinalize
之间的每个延迟动作时,都会将其写入脚本。然后,作为InstallFinalize
的一部分,执行脚本中的所有动作。 (除非发生故障,否则将涉及回滚操作,而其余的延迟操作将被跳过。)
[大多数内置动作要么具有延迟的组件,要么被完全延迟。对机器的任何更改均应推迟进行。请注意,延迟的动作具有limitations,特别是关于它们可以读取哪些属性(通过MsiGetProperty或同等属性)。
这使我们回到您的自定义操作正在尝试执行的问题。根据您的要求,直接的答案是您需要将其标记为延迟。这样做可能需要您更改其实现。但更重要的是,您应该考虑是否有内置的Windows Installer手段来完成您要完成的工作,或者内置于所使用工具的方式(在本例中为InstallShield)。如果是这样,您应该更喜欢使用这些内置替代方法而不是编写自己的方法,因为编写自定义操作很容易,因为它不能处理应有的所有情况。]
Michael Urman
事实回答是,您需要在InstallExecuteSequence中的CreateShortcuts
之前和InstallFiles之后安排的deferred模式自定义操作。在此位置,文件将在磁盘上可用,并且快捷方式尚未创建。但是,为了清楚起见,必须正确理解几件事。<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS8xWDFNUC5wbmcifQ==” alt =“在此处输入图像描述”>“ >>
Michael Urman