卸载自定义操作期间删除文件时出错(InstallShield)

时间:2014-06-02 18:55:47

标签: file-io installshield uninstall custom-action

我在标准dll中编写C ++函数以在卸载期间删除文件夹中的文件。这些文件在某些​​时候由应用程序添加。

我使用DeleteFile逐个删除文件。 DeleteFile返回ERROR_ACCESS_DENIED错误。在REMOVE =" ALL"。

之后,在InstallSalidate之后,从InstallShiel卸载中调用DeleteFile作为自定义操作。

我为何获得ERROR_ACCESS_DENIED的任何想法?我作为管理用户卸载。

InstallShield项目是基本的MSI项目安装。我使用的是InstallShield Spring 2012专业版。

从正常测试应用程序(Windows窗体应用程序)调用时,Delete函数可以正常工作。 Dll是一个Win32 DLL。

3 个答案:

答案 0 :(得分:1)

这些文件的类型和位置在哪里?如果要将文件视为用户数据,我根本不会删除它们。

尽可能使用MSI RemoveFile table删除安装或卸载文件。使用自定义操作太容易出错且耗时。

答案 1 :(得分:1)

删除文件表将起作用,但是如果调用DLL的.exe正在使用中则不行。 如果是这种情况,您可以使用条件REMOVEALL=TRUE进行自定义操作,然后直接执行该操作。

您需要先将其放在InstallExecute序列中,以便它以静默模式运行。

例如,在VBScript中:

Dim oShell : Set oShell = CreateObject("WScript.Shell")
oShell.Run "taskkill /im exeprocessname.exe", , True

答案 2 :(得分:0)

导致此问题的原因是被调用函数的dll位于要删除的文件夹中。