1

我有一个作为 CAB 交付的 ActiveX 控件。我有一个 HTML 页面,它只是一个带有出租车名称和 clsid 的 OBJECT 标记(因此页面上没有其他内容)。

这会导致 IE 询问是否安装 ActiveX 控件,我允许这样做。它下载 CAB,提取安装程序并开始运行它。

当 MSIEXEC 正在运行并尝试安装控件时,IE 决定删除 .MSI 文件所在的临时目录中的文件。有时,文件被进程锁定,删除失败,然后安装成功,但大多数时候删除成功,然后 MSIEXEC 记录一个错误,指出 MSI 文件不存在。

我可以看到所有这些都发生在 PROCMON 中,但我不知道为什么。它可以在多个版本的 Windows 和 IE 中重现。这不仅仅是删除 MSI - 它正在删除临时目录中的文件。

我唯一的线索是文件的修改日期是它在构建机器上创建的日期。这不是我可以不断更新的东西(它在网络服务器上的 CAB 内部)——我不能每五分钟构建一次这个 CAB 以保持修改后的日期新鲜——所以,我不认为那是它,但想提一下它作为线索。

为什么 IE 会删除临时文件中的文件,有什么方法可以阻止它这样做?

4

1 回答 1

0

终于想通了。如果你的 CAB 中有一个钩子来启动应用程序,它们在退出之前不能返回给调用者。默认情况下,控制台应用程序会这样做——GUI 应用程序不会。

我们的安装程序是 CAB 内的普通 setup.exe GUI——所以它在开始运行后立即返回到 IE。然后 IE 开始清理 CAB 的临时文件。

我们制作了一个控制台应用程序,它采用命令行参数进行系统调用,然后在系统调用启动的进程退出之前不会退出。这会阻止 IE 进行清理,直到 setup.exe 完全完成。

于 2011-03-02T02:17:39.377 回答