我需要更新使用自注册 DLL(通过 注册CESelfRegistered
)的应用程序。在注册过程中,DLL 会将一些将来使用的路径写入注册表。
现在的问题是在我的新 DLL 中存储的路径不同。并且由于 DLL 在设备内存中处于活动状态,因此在更新过程中会在注册期间调用 OLD DLL 文件。因此,更新完成并重新启动设备后,新的 DLL 仍会读取旧设置。
避免这种行为的正确程序是什么?
我需要更新使用自注册 DLL(通过 注册CESelfRegistered
)的应用程序。在注册过程中,DLL 会将一些将来使用的路径写入注册表。
现在的问题是在我的新 DLL 中存储的路径不同。并且由于 DLL 在设备内存中处于活动状态,因此在更新过程中会在注册期间调用 OLD DLL 文件。因此,更新完成并重新启动设备后,新的 DLL 仍会读取旧设置。
避免这种行为的正确程序是什么?
要更新使用 DLL 的正在运行的应用程序,您必须编写一个安装程序来杀死或结束正在运行的 exe,卸载包含 DLL 的 exe,然后安装新的 exe 和 dll。
例如,您可以编写一个 cab 文件 setup.dll,它将停止/终止 exe 并在 install_init 中取消注册 DLL。可能添加代码以删除旧的注册表项。CE 安装 DLL 是在 CAB 安装期间在安装和卸载初始化之前和之后运行代码的选项。
您还可以在执行这些 exe 和 dll 替换(包括 exe 杀戮等)的应用程序中编写代码。然后在启动过程中包含此更新程序 exe 并运行一次。
如果尚未安装应用程序,则不能依赖从 ce_setup.dll 中启动应用程序。
有关ce_setup.dll 的说明,请参见http://msdn.microsoft.com/en-us/library/aa924308.aspx