当前位置 : 主页 > 编程语言 > delphi >

inno-setup – 使用Inno Setup更新Windows资源管理器外壳扩展

来源:互联网 收集:自由互联 发布时间:2021-06-23
我有一个程序产品,另外安装 Shell扩展到 Windows资源管理器.它是在C#中创建的,并使用.NET Framework v4.0.在安装过程中,使用regasm.exe安装Shell扩展.一切正常,直到我想安装更新版本的应用程序
我有一个程序产品,另外安装 Shell扩展到 Windows资源管理器.它是在C#中创建的,并使用.NET Framework v4.0.在安装过程中,使用regasm.exe安装Shell扩展.一切正常,直到我想安装更新版本的应用程序.问题是我无法更新shell扩展DLL,因为它加载到资源管理器的内存中.安装Inno Setup之前显示以下消息

它说安装程序需要终止Windows资源管理器,因为它使用应由安装程序更新的文件.
它终止了资源管理器进程,但没有再启动它.这是我的第一个问题.

其实我不想强制用户关机资源管理器.但我不知道如何从资源管理器的内存中卸载托管的shell DLL.如果通过regasm.exe dll卸载它仍然保留在内存中.事实上,我甚至找不到这种检查发生的地方,因为我收到了已经安装的来源.

Inno安装程序的文件使用(IssProc.dll)加载项没有帮助,因为一旦我通过此加载项终止Windows资源管理器,资源管理器立即重新启动.

我怎么能解决这个问题?如何以更好的用户体验更新shell扩展dll?
也许有人可以给我一个提示,检查正在使用的文件的代码放在哪里?

O和BTW我使用的是Windows 7 x64.

在文件入口处使用 restartreplace标志.来自参考:

When an existing file needs to be replaced, and it is in use (locked)
by another running process, Setup will by default display an error
message. This flag tells Setup to instead register the file to be
replaced the next time the system is restarted
(by calling MoveFileEx
or by creating an entry in WININIT.INI). When this happens, the user
will be prompted to restart their computer at the end of the
installation process.

因此,使用此标志不会导致向导要求使用该文件终止应用程序,而是将文件更新安排到下次重新启动并提示用户在安装结束时重新启动计算机,我认为用户友好且常用.

网友评论