我有应用程序A和B都使用共享组件S.如果S是DLL程序集,我只是将它的副本作为私有程序集放到每个应用程序中。但是S是EXE,A和B通过协议与它通信。当A和B运行时,它们必须与S的相同实例通信。可能的情况:
新版本的S将与旧版本的A和B.兼容。如果协议发生变化,S将支持旧协议和新协议等。
在这种情况下,最佳部署策略是什么?我正在使用Windows Installer(MSI)。将S作为具有单独MSI的单独应用程序并从其他MSI调用MSI似乎是好的,但也许有更好的方法。也许MSM?..我想保持简单安装。提前感谢您的回答。
答案 0 :(得分:0)
MSI使用引用计数来处理您的确切方案。应为唯一项(位置和二进制)分配组件GUID,然后在MSI之间共享该组件GUID。如果您通过编译到两个MSI(A& B)中的公共片段使用WiX,则可以轻松完成此操作。然后当你安装A& B,无论顺序如何,S的引用计数都会增加,因此卸载一个不会删除exe,如果另一个也安装了它。
关键是确保两个MSI使用相同的组件GUID并将S安装到同一位置。
编辑 - 在从MSDN计算的组件引用中添加URL
http://msdn.microsoft.com/en-us/library/windows/desktop/aa368007(v=vs.85).aspx
请注意,该属性称为msidbComponentAttributesSharedDllRefCount,但它应该适用于我认为的场景。