使用embeddedchainer的msi在卸载时出现“bad handle”失败

时间:2012-11-26 16:49:50

标签: windows-installer

我终于让我的嵌入式链接器msi运行了,通过我的C#chainer.exe中的Installer.InstallProduct安装了四个子msi(就像在stackoverflow上其他地方找到的唯一一个chainer示例中所述)。 我的问题:如果我之后卸载了包,当调用“transaction.Join”时,这次它会因MSI错误而失败:错误的句柄。我必须在taskmanager中杀死msiexec.exe进程,然后一切正常运行。

有什么建议吗?

附录:我正在使用Windows Installer 4.5,并且MsiEmbeddedChainer表中只有一个条目。这四个msi由chainer可执行文件一个接一个地处理。

2 个答案:

答案 0 :(得分:0)

以下是一些需要检查的建议:

1)Windows Installer 4.0及更早版本不支持多包Windows Installer安装的事务处理。需要Windows Installer 4.5或更高版本作为单个事务回滚多个包的安装。安装程序安装,修复,更新或删除应用程序时可能导致问题的Windows Installer功能列在此处:Multiple-Package Installations

2)如果MsiEmbeddedChainer表中有多个条目。只能启动一个嵌入式链接器。如果多个条目都已经过条件运行,则未定义哪个条目将运行。

答案 1 :(得分:0)

最后,问题得到解决:c#embedded chainer的标准示例中存在一个错误:

在线: IntPtr ptr = new IntPtr(Convert.ToInt32(args [0],16)); “16”必须改为“10”!

否则,如果嵌入式链接器启动的事务超过10个(如我的设置中,安装了5个子msi),“transaction.Join”使用的句柄在某些时候会出错并给出“坏处理”错误。

非常感谢微软帮助解决这个问题!