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