【问题标题】:File Replace during upgrade升级期间的文件替换
【发布时间】:2013-07-16 04:45:34
【问题描述】:

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

"C:\Windows\System32\drivers\xxx.sys

尝试替换现有文件时出错: 删除文件失败;代码 5。 访问被拒绝。

点击Retry再试一次,Ignore跳过这个文件(不推荐),或者Abort取消安装”

有趣的是,即使在上述弹出窗口之后,我们也能够手动将 xxx.sys 重命名为 xxx.sys.old。我们曾经建议客户重命名 xxx.sys 到 xxx.sys.old 并“重试”安装。重命名后,升级完成,没有任何问题。

问题

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

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

【问题讨论】:

标签: windows inno-setup


【解决方案1】:

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

请记住要求用户重新启动计算机以完成安装。
另一种选择是使用安装程序重命名文件,然后再次使用窗口的注册表删除不需要的文件。

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

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

从微软支持重命名的示例: 使用的语法是(不带引号):
"\??\源文件!\??\目标文件"

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

希望对你有帮助!

【讨论】:

  • 现在我们在使用 renamefile 升级之前将 xxx.sys 重命名为 xxx.sys.old。我的问题是,当我们点击 DeleteFile 失败时,是否可以通过程序重命名 xxx.sys;代码 5 问题。
  • 当计算机重新启动时,上面的注册表项也可以删除正在使用的文件(就像 restartreplace 一样,但是我没有看到使用该命令删除文件),因此它不会保留在系统中作为未使用的文件。正如原始发布者所指出的,他们无法在文件正在使用时(在安装过程中)删除该文件,因此必须在重新启动后删除。
  • 只有“restartreplace”用户必须在使用软件之前重新启动他们的系统,旧文件将保留它的当前名称,直到重新启动。通过在安装期间重命名文件(使用 renamefile)并使用 (deleteafterinstall) 或注册表删除旧文件,用户无需重新启动即可使用该软件。然而,两者都是有效的选项。
  • 更正,“deleteafterinstall”不起作用。必须使用注册表在重新启动时执行删除。我找不到提到使用“restartreplace”来做同样的事情。
  • 您可以从[Code] 通过RestartReplace support function 进行操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多