我希望在完成完整安装后执行自定义操作。经历了这么多的网站,但没有得到它的工作。
<Binary Id="DepTypeCustomActionBinary" SourceFile="$(var.SolutionDir)\Proj.Setup\DepCustomAction.CA.dll"/>
<CustomAction Id="CheckDepType" BinaryKey="DepTypeCustomActionBinary" DllEntry="CustomAction1" Impersonate="no" Execute="deferred" Return="check" HideTarget="no" />
<InstallExecuteSequence>
<Custom Action="CheckDepType" After="InstallFinalize">NOT Installed</Custom>
</InstallExecuteSequence>
以上是我的代码,我收到以下错误:
CheckDepType is a in-script custom action. It must be sequenced in between the InstallInitialize action and the InstallFinalize action in the InstallExecuteSequence table
答案 0 :(得分:0)
我只会添加一个简短的答案,而不是添加太多评论。我不确定dscrt40.dll
正在做什么 - 它是在安装期间用于某些运行时依赖性的文件吗?我不建议将您自己的文件安装到预先存在的文件夹中 - 如果这就是您正在做的事情。
我想您可以尝试使用RemoveFile construct让Windows Installer引擎在安装时删除有问题的文件,这样可以避免需要自定义操作。如果您首先通过Windows Installer组件安装要删除的文件,则不能执行此操作 - 然后可能会自行修复以便在之后将其恢复。
在InstallFinalize
之后无法对系统进行更改的自定义操作 - 数据库更改事务以InstallFinalize
结束,并且InstallFinalize
之后的自定义操作不再提升1}}(可以插入立即模式自定义操作,但除非您使用管理员权限运行,否则它们将失败 - 不要尝试 - 不可能依赖它)。您只能在InstallInitialize
之后的InstallFinalize
之后和InstallExecuteSequence
之前插入更改自定义操作(延迟自定义操作)。
您应该知道,在InstallFiles
操作运行后,文件将出现在磁盘上(技术上是第二次运行InstallExecuteSequence - 第一次运行 - 立即 - 只创建一个执行脚本,第二次运行 - 延迟 - 执行脚本),因此在运行此操作后原则上可以删除文件,但这样做没有任何意义。