升级期间文件替换

时间:2013-07-16 04:45:35

标签: windows inno-setup

我们使用Inno Setup(版本5.4.2)作为生成安装程序的打包工具。在将我们的软件从旧版本升级到当前版本时, 我们尝试覆盖现有的二进制文件/驱动程序。这通常会导致问题,因为某些监控软件(如“HP ArcSight Logger / Connector”,“SplunkUniversalForwarder”等)会在我们的二进制文件上保留文件句柄并导致覆盖失败。我们的安装程序会在每次遇到此问题时显示beolow popup消息。

“C:\ Windows \ System32下\驱动\ xxx.sys

尝试替换现有文件时发生错误: DeleteFile失败;代码5。 访问被拒绝。

点击重试再试一次,忽略跳过此文件(不推荐),或点击中止取消安装“

有趣的是,即使在上面弹出窗口之后,我们也可以将xxx.sys重命名为xxx.sys.old。我们曾经建议cusotmers重命名 xxx.sys到xxx.sys.old和'重试'安装。重命名后,升级过去完成没有任何问题。

问题

1)当我们遇到这个问题时,是否可以通过程序重命名xxx.sys。

2)重现DeleteFile的任何过程都失败了;代码5问题?

1 个答案:

答案 0 :(得分:2)

使用安装程序,您可以重命名现有文件,并在Windows注册表的帮助下使用正确的文件名安装新文件。

请记住要求用户重新启动计算机以完成安装。

另一种选择是使用安装程序重命名文件,然后再使用窗口的注册表删除不需要的文件。

Window的注册表允许您在重新启动时删除或重命名文件,作为安装的一部分。

使用PendingFileRenameOperations的参考: http://support.microsoft.com/kb/181345

从Microsoft支持重命名的示例: 使用的语法是(没有引号):
“\ ?? \ source file!\ ?? \ target file”

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager
值名称:PendingFileRenameOperations数据类型:REG_MULTI_SZ
值数据:\ ?? \ c:\ temp \ win32k.sys!\ ?? \ c:\ winnt \ system32 \ win32k.s

虽然需要使用空值,但也可以使用相同的命令删除文件。 http://www.pcreview.co.uk/forums/pendingfilerenameoperations-delete-file-t1715654.html

用于删除文件的相同示例: HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager
值名称:PendingFileRenameOperations数据类型:REG_MULTI_SZ
值数据:\ ?? \ c:\ temp \ win32k.sys \ 0 \ 0 \ 0

我希望这可以帮到你!