2016-10-18 54 views
2

我們有一個Windows應用程序,其中有一個組件可寫入ProgramData文件夾。當運行卸載程序時,不會刪除由該組件生成的文件。使用UAC :: RunElevated,我們首先安裝一個第三方組件到ProgramDataNSIS RMDir無法刪除用戶在ProgramData中創建的文件

SetOutPath "$RENDERER_INSTALL_DIR" 

LogSet On 
File /r "${MAGNIFY_DIR}/secRenderer/Arelle/*" 
LogSet Off 

AccessControl::GrantOnFile "$RENDERER_INSTALL_DIR" "(S-1-5-32-545)" "FullAccess" 

在操作過程中,該組件寫入自己的安裝目錄中ProgramData

在卸載過程中,我們試圖刪除上面創建的文件夾,再次使用UAC :: RunElevated

RMDir /r $RENDERER_INSTALL_DIR 

但是,通過操作組件創建的文件不會被刪除。

我們觀察到,這些文件由使用該組件的用戶擁有,而不是管理員,但該用戶仍具有完全的讀取,寫入和刪除權限。

我們如何完成這項工作?

+0

我會建議你不要使用UAC插件。 – Anders

回答

2

這裏有兩個很多未知數來真正回答這個問題。

爲什麼涉及UAC插件?它只對較低您的系統訪問有用!正確使用也很困難,所以我建議你嘗試一下。

此第三方組件是否更改ACL?在卸載之前檢查ACL。

file system virtualization可能是騙你嗎?檢查VirtualStore文件夾。

Process Monitor說什麼?你是否獲得ACCESS_DENIED或其他一些錯誤?

不建議所有用戶完全訪問ProgramData下的文件夾,並且任何需要此操作的組件都不會遵循Windows徽標準則。

+1

謝謝 - 進程監視器告訴我們RMDir行沒有實際運行,我們沒有意識到這一點,因爲我們沒有意識到卸載程序會自動刪除它知道的文件 –

相關問題