2012-01-24 88 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" /> 

將這個組件標籤中。

相關問題