2013-02-20 93 views
2

關於inno-setup的一個簡單問題:我可以自定義要通過卸載程序刪除哪些文件嗎?據我所知,卸載程序總是卸載安裝程序創建的所有文件。如果答案是肯定的,我應該怎麼做?我的情況是:安裝我的應用程序後,目錄「{pf} \ myapp \」包含一些dll,兩個可執行文件,併爲每個可執行文件創建了兩個桌面圖標和卸載程序。我期望的是用戶可以卸載每個可執行文件,而不是所有的文件;如果它是唯一的可執行文件,卸載程序將刪除所有文件。在inno安裝程序中卸載一個應用程序時,我可以控制要卸載的內容嗎?

在此先感謝。

+0

請提出問題,你問的更清楚 – 2013-02-20 03:55:01

+0

對不起,英文不好,我詳細的問題; – Webber 2013-02-20 09:57:49

+0

您提到每個可執行文件的卸載程序。你能確認這是兩個獨立的軟件包被安裝到同一個位置嗎?如果是這樣,你只需要共享文件上的'sharedfile'標誌(在兩個設置中),導致Inno只有在它們被加密後纔會刪除它們。 – Deanna 2013-02-20 10:20:48

回答

2

如果您需要單獨的卸載程序,則必須編寫單獨的安裝程序。一般的規則是你必須根據應用程序編寫單獨的安裝程序。

這就是說,你可以有任意數量的共享文件,這可能是DLL的,可執行文件等,是不同的應用程序之間共享

Windows具有良好定義的程序來跟蹤共享文件,並帶有引用計數。引用計數由安裝程序遞增並由卸載程序遞減。只有在卸載期間引用計數達到0時,纔會從系統中刪除這些文件。

您使用sharedfile標誌來指示安裝程序文件被共享。該中是指mylib.dll文件在下面的例子中共享:

[Files] 
Source: "MyProg.exe"; DestDir: "{app}" 
Source: "MyProg.chm"; DestDir: "{app}" 
Source: "MyLib.dll"; DestDir: "{sys}"; Flags: sharedfile 
Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme 

從文檔(重點煤礦):

sharedfile

指定該文件的多個應用程序之間共享, ,只有在卸載時才能刪除,如果沒有其他應用程序正在使用它。大多數安裝到Windows系統目錄的文件應使用此標誌,包括.OCX,.BPL和.DPL文件。

Windows的標準共享文件引用計數機制(位於註冊表下HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ SharedDLLs)用於跟蹤有多少應用程序依賴於該文件。每次安裝文件時,文件的引用計數都會增加。 (無論安裝程序是否實際替換磁盤上的文件,都會發生這種情況。)卸載使用該文件的應用程序時,引用計數會減少。如果計數達到零,文件將被刪除(通過用戶確認,除非還指定了標記)。

相關問題