windows - 升级期间文件替换

标签 windows inno-setup

我们使用 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 注册表的帮助下重命名现有文件并使用正确的文件名安装新文件。

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

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

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

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

希望对你有帮助!

关于windows - 升级期间文件替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17668185/

相关文章:

windows - 适用于 Windows 的类似 diff3 的程序?

inno-setup - 如何测试 Inno Setup 运行的文件夹中是否存在文件?

inno-setup - 在 Inno Setup 中的 AppData 中创建一个文件夹

installation - 如何以静默方式安装Visual Studio Code(安装结束时不自动打开)?

C# 使用 Process.Start() 打开不可用的网络路径

java - 如何使 HSQLDB 成为 Windows 服务?

windows - 回收安全的线程 ID 和线程堆栈何时被释放?

c# - 将 ApplicationFrameHost 托管的 UWP 应用程序连接到它们的实际进程

inno-setup - Inno Setup - 从 .Net 4.5 位置运行 InstallUtil

text-files - 使用 Inno Setup 脚本将行插入文本文件?