卸载时如何删除日志文件夹?

时间:2012-01-24 12:12:33

标签: wcf iis wix directory

我在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>

问题是卸载时正在使用日志文件,卸载程序说请停止应用等...

3 个答案:

答案 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标签内。