1.Component的屬性Permanent設置爲Yes。
2.Component的ID爲空。
3.Component被其餘應用程序或者Feature使用。
4.設置了一個Condition,在安裝時啓用某個Feature,卸載時禁用該Feature。意思就是卸載的時候不卸載某個Feature,全部它對應的文件也會保留。
5.Component的關鍵文件在這個鍵值下有先前的引用HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/SharedDLLs.
6.Component安裝在系統文件夾下面,它的某個文件在這個鍵值下有先前的引用 HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/SharedDLLs.
7.該文件受Windows Resource Protection (WRP)或Windows File Protection (WFP)保護。我解釋一下5和6點,由於我遇到的問題就是由於這個緣由。我在工程裏開啓了「Only for me」和"For All Users"的功能。當用戶選擇Only for me,第一次安裝能夠正常卸載,可是第二次安裝在同一路徑的話,卸載後文件都保留了下來。緣由是在InstallShield裏新建一個組件的時候,Shared屬性默認爲YES。這就意味着這個組件成爲了一個SharedDLL。安裝的時候,InstallShield會在註冊表的HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/SharedDLLs 這個鍵值下爲每個SharedDLL寫一條信息。若是在卸載的時候該用戶並無刪除這個鍵值的權限,結果這些鍵值都保留了下來。第一次卸載是沒有問題的,文件被刪除了。可是當用戶第二次安裝在同一個目錄的時候,就會出現5和6的狀況,每個Component都有一個先前的引用,這個時候卸載的話,文件都會保留下來。解決的方法就是把Component的Shared屬性設置爲NO。若是你的Component不少的話就不要去Componenent界面改了,打開Direct Editor界面,找到Component表,能夠發現這個表裏面並無Shared列。其實只要把Attributes(i2)列的值改爲0就能夠了。若是你有其餘的設置的話可能你要實驗一下你的Attributes(i2)列該取什麼值。在Component界面改一下,而後後頭看錶裏面就知道了。這樣設置以後安裝在非系統目錄是沒有問題的,可是若是安裝在「C:/Program Files」這樣的系統目錄仍是可能出現沒法刪除文件的問題。很顯然,這是由於第7點了。解決的方法就是給文件夾受權。
文章來自【swxd594】的回答:http://zhidao.baidu.com/link?url=QjgrAM3bEaLvRbr6kPn-PnIIJf5O77QD5tC2FIeAWcuCL8vBDaYoETlaG8vfp5-lUaY0cP13n5EMSx9hF4vFnq0j8YZJVRdkeRgZo4Ov5ru