如何更新已部署的类库(DLL)?

时间:2011-04-21 19:54:09

标签: c# windows-installer class-library dll-injection

目前我有一个包含类库,安装程序和安装项目的C#解决方案。安装项目生成一个MSI来安装我的类库(dll),注册的vsdrfCOM,在最终用户客户端上由第三方应用程序安装后引用。我对第三方应用程序没有任何控制权。这一切都按预期工作,我的类库被引用没有问题,可以通过部署的MSI安装/重新安装。

不幸的是,我试图解决的问题是如何将更新应用到类库(dll),而不期望最终用户通过MSI卸载,下载新的MSI并运行它。此外,还有我想要维护的用户状态文件夹/文件。基本上,只需覆盖类库(dll)。我最初拍摄的是初始化库,打到远程位置,检查版本,并在需要时下载新的dll。然后通知用户他们需要重新启动第三方应用程序。

  1. 只是下载一个新的dll并且对旧版本进行保护即使保留了CLSID也不会起作用,因为看起来注册表不喜欢某些内容。灵感来自此处的自动更新项目http://www.codeproject.com/KB/vb/Auto_Update_Revisited.aspx

  2. ClickOnce似乎不适用于类库,除非您有与之关联的Forms / Console应用程序。

  3. 在不覆盖上述用户状态文件的情况下,不确定是否可以下载新的MSI并在被动状态下运行。
  4. 那么,有没有办法在上述条件下更新已安装MSI的dll?

    感谢。

1 个答案:

答案 0 :(得分:0)

如果您的类库由两个.dll组成,那么假设库A和库B。

库A将接口暴露给第三方应用程序,但是将实际逻辑推迟到库B.每次加载库A时,它首先在线检查新版本并在可用时下载它来加载库B.理论上,您的MSI只能安装库A,并指望库B在运行时下载。 (尽管在互联网连接失效的情况下包括两者可能是一个好主意)