我在NSIS上编写了一个注册shell扩展的安装程序。
在卸载和升级时,旧的扩展程序无法删除/覆盖,因为explorer.exe将其锁定,并且终止了重新启动该进程。
因此,我使用其他名称提取新扩展名,将旧扩展名标记为删除(卸载/升级),并通过 PendingFileRenameOperations 注册表项将新扩展名重命名为其原始名称(仅限升级)。到目前为止,这很好。
问题是,我必须在启动时注册新的shell组件,因为 PendingFileRenameOperations 仅适用于重启。有没有办法在重新启动后安排regsvr32操作?
我无法通过 RunOnce 上的.bat执行来执行此操作,因为注销/登录也会触发 RunOnce 操作。
提前致谢。
答案 0 :(得分:0)
我发现解决此问题的最简单方法是创建一个删除所有相关注册表项和值的注册表脚本。在(un-)安装程序中运行注册表脚本,并为COM DLL安排“在启动时删除”。可能有更好的方法来做到这一点,但我还没有找到它。