2012-01-24 56 views
0

我在IIS中有WCF。 WCF使用log4net日志。如何在卸载时删除日志文件夹? 日志文件夹位于目标文件夹中。如何在卸载时删除日志文件夹?

我使用这段代码:

<Directory Id='Logs' Name='Logs'> 
    <Component Id="comp_iislogs" Guid="{0B0E2F6E-008D-42C9-8A7C-1F1265C077A1}" 
     SharedDllRefCount="no" KeyPath="no" NeverOverwrite="no" Permanent="no" Transitive="no" 
     Win64="no" Location="either"> 
     <RemoveFile Id="Files" On="uninstall" Name="*.log"></RemoveFile> 
     <CreateFolder/> 
    </Component> 
    </Directory> 

问题是日志文件在使用上卸载和卸载说请停止应用程序等等

回答

0

MSI只删除文件它在初始复制安装。 应用程序生成的日志无法被卸载进程识别。 换句话说,如果一个目录中至少有一个文件存在被删除,MSI会将其视为用户文件并跳过删除它的父目录。

为了删除日志目录,您需要先强制删除它的内容,但我会建议您不要这样做,因为您可能遇到不想处理的锁定问题。

+0

这段脚本可以删除文件夹和文件,但问题是当它尝试去做它log4net仍然使用日志文件。它是在卸载过程中... – Oleg

1

你必须杀死日志文件打开的进程!如果这是一个Web应用程序中的东西,那么你可能只需要回收应用程序池中的待释放的句柄(我认为)。

你可以在你的WiX脚本中使用appcmd recycle apppool /apppool.name: <pool name>来实现。您可能想要实际停止然后重新启动站点,但是为了避免当时打开它的可能性。

0

使用来自WiX的Util扩展的RemoveFolderEx元素。 通过这种方法,所有的子目录和文件都被删除。

实施例:

<util:RemoveFolderEx On="uninstall" Property="Logs" /> 

将这个组件标签中。