我正在使用Installshield 2008 Primer Edition开发一个包,Project类型是Installscript MSI项目。
我面临的问题是在安装过程中我将部分文件安装到以下位置C:\Program Files\Company\SystemFiles
从我复制的位置并将文件集添加到 System32 文件夹中,它包含DLL和OCX文件,使用Installscript完成了对 System32 文件夹的复制。
由于在卸载过程中出现这种情况,安装的文件将从 System32 中删除,因为需要相同DLL的其他相关应用程序已停止工作。
我已经接触过Installscript,将文件从ProgramFiles复制到System32文件夹,而不是使用内置选项,因为我们在升级过程中遇到问题,以避免我使用的是Installscript。
即使我尝试了几种解决方法,例如使用Installscript(例如 FILE_ATTR_SYSTEM )将文件复制后的文件属性设置为System32,它设置了系统属性,但在卸载过程中仍然删除了文件。
知道如何将文件属性设为 PERMANENT 或 SHARED ;这会有帮助吗,如果有,那么如何使用Installscript进行设置?
答案 0 :(得分:1)
我有两个想法 1)我认为您可以使用SHARED选项,因为这样在卸载时不会删除文件。
2)当我遇到类似的问题时,我所做的是将所有必需的文件放在安装目录中,这样卸载时只删除已安装的文件。(我知道这不是最佳解决方案)< / p>
(注意:我在6年前就开始使用安装盾,所以只记得某些事情)
答案 1 :(得分:0)
您还可以从安装脚本中禁用日志记录。这将使安装程序“忘记”它安装了特定的文件组或功能。
在复制了要永久保留在系统上的文件后,应确保再次启用日志记录。
如果您忘记在禁用日志后启用日志记录,则卸载过程可能无法正常运行。
语法如下: 禁止(记录);
//添加代码以复制您的永久文件 使能(记录);
答案 2 :(得分:0)
我看到这是一个古老的问题,但我只是遇到了这个问题。似乎是一个普遍的问题。一个好的解决方案是将文件暂存到大多数为程序文件的私有目录中,然后执行自定义操作进行复制和注册(ocx等)。 Installshield记住它复制的内容,因此倾向于将其删除。不要打扰其他事情,例如日志记录(我的建议)。设置自定义操作的条件,以使其在卸载期间不运行。 尽管有时我做了另一个怪异的实现,只有程序员习惯了。。将文件打包为资源,并创建自己的代码来提取和部署(类似于Process Explorer之类的工具)。在某些用例中,需要这种实现。但这又是复杂的,显然是在重新发明轮子。除非您熟悉C / C ++和Windows API,否则这将很困难。我仍然建议您不要使用这种实现,因为它也被认为是“有害行为”。但是,到目前为止,我从未收到过反恶意软件产品的警告。
答案 3 :(得分:-1)
对于InstallScript项目: 为了防止在卸载过程中删除特定组件中的文件,请执行以下操作: 1-从“组织”文件夹中选择“组件”视图。 2-选择包含您不想在卸载过程中删除的文件的组件。 3-将右窗格中的“卸载”属性更改为“否”值。
对于MSI项目: 为了防止在卸载过程中删除特定组件中的文件,请执行以下操作: 1-从“组织”文件夹中选择“组件”视图。 2-选择包含您不想在卸载过程中删除的文件的组件。 3-将右窗格中的“永久”属性更改为“是”。