我在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 :(得分:1)
你必须杀掉那个打开日志文件的进程!如果这是Web应用程序中的某些内容,那么您可能只需要回收应用程序池以释放句柄(我认为)。
您可以在WiX脚本中使用appcmd recycle apppool /apppool.name: <pool name>
执行此操作。您可能希望实际停止然后重新启动站点,但只是为了避免它在当时打开的任何可能性。
答案 1 :(得分:0)
MSI仅删除在初始安装期间复制的文件。 卸载过程无法识别应用程序生成的日志。 换句话说,如果要删除的目录中至少存在一个文件,MSI会将其视为用户文件并从删除中跳过其父目录。
为了删除日志目录,您需要先强行删除其内容,但我建议您不要这样做,因为您可能会遇到您不想处理的锁定问题。
答案 2 :(得分:0)
在WiX中使用Util扩展程序中的RemoveFolderEx元素。 使用此方法,将删除所有子目录和文件。
示例:
<util:RemoveFolderEx On="uninstall" Property="Logs" />
将其放在Component标签内。