1

我正在使用 Installshield 2008 Primer Edition 开发一个包,项目类型是 Installscript MSI 项目。

我面临的问题是在安装过程中我正在将一些文件C:\Program Files\Company\SystemFiles从这个位置安装到以下位置我正在复制并将一组文件添加到System32文件夹中,它包含 DLL 和 OCX 文件,复制到System32文件夹中已经完成使用安装脚本。

由于这个在卸载过程中,安装的文件将从System32中删除,因为需要相同 DLL 集的其他依赖应用程序已停止工作。

我已经接近 Installscript 将文件从 ProgramFiles 复制到 System32 文件夹,而不是使用内置选项,因为我们在升级过程中遇到问题,以避免我使用 Installscript。

即使我尝试了几种解决方法,例如在将文件复制到 System32 后使用诸如FILE_ATTR_SYSTEM之类的安装脚本设置文件属性,该安装脚本设置系统属性,但在卸载期间仍会删除文件。

知道如何将文件属性设置为PERMANENTSHARED;这会有帮助吗,如果有帮助,那么我该如何使用 Installscript 进行设置?

4

4 回答 4

1

我有 2 个想法 1)我认为您可以使用 SHARED 选项,因为这不会在卸载时删除文件。

2)此外,当我遇到类似问题时,我所做的是将所有必需的文件放在安装目录本身中,以便在卸载时只删除已安装的文件。(我知道这不是最好的解决方案)

(注意:大约 6 年前我一直在安装盾牌,所以只记得某些事情)

于 2010-07-28T06:59:46.997 回答
0

您还可以从安装脚本禁用日志记录。这将使安装程序“忘记”它安装了特定的文件组或功能。

在复制要永久保留在系统上的文件后,应确保再次启用日志记录。

如果您在禁用日志记录后不记得启用它,则您的卸载过程可能无法正常工作。

语法如下: Disable(LOGGING);

//添加代码以在此处复制您的永久文件 Enable(LOGGING);

于 2014-02-03T18:49:24.453 回答
0

我看到这是一个老问题,但我刚刚遇到了这个问题。似乎是一个普遍的问题。一个好的解决方案是将文件暂存到私有目录,主要是程序文件,然后使用自定义操作进行复制和注册(ocx 等)。Installshield 会记住它复制的内容,因此它倾向于删除它们。不要打扰其他任何事情,例如日志记录(我的建议)。设置自定义操作的条件,使其在卸载期间不运行。虽然以前我做了另一个只有程序员才习惯做的奇怪实现。将文件打包为资源并创建我自己的代码来提取和部署(Process Explorer 这类工具所做的事情)。有某些用例保证了这种实现。但这又是复杂的,显然是在重新发明轮子。除非您精通 C/C++ 和 Windows API,否则这将是困难的。我仍然建议您远离这种实现,因为它也被认为是一种“恶毒行为”。然而,到目前为止,我从未收到反恶意软件产品的警告。

于 2019-07-15T11:09:34.590 回答
-1

对于 InstallScript 项目: 要防止在卸载过程中删除特定组件中的文件: 1- 从组织文件夹中选择组件视图。2-选择包含您不想在卸载期间删除的文件的组件。3-将右窗格中的“卸载”属性更改为“否”值。

对于 MSI 项目: 要防止在卸载过程中删除特定组件中的文件: 1- 从组织文件夹中选择组件视图。2-选择包含您不想在卸载期间删除的文件的组件。3-将右窗格中的“永久”属性更改为“是”值。

于 2020-07-13T10:24:28.913 回答