2012-06-13 41 views
1

是否可以從該文件夾中刪除文件以及如何操作?在卸載基於Inno的設置時從用戶配置文件中刪除文件

目前我有這裏面不工作

[UninstallDelete] 
Type: files; Name: "{userappdata}\Roaming\Myapp\*"; 
Type: files; Name: "{commonappdata}\Roaming\Myapp\*"; 
Type: files; Name: "{app}\*.*"; 

[Code] 
///////////////////////////////////////////////////////////////////// 
function GetUninstallString(): String; 
var 
    sUnInstPath: String; 
    sUnInstallString: String; 
begin 
    sUnInstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{#emit SetupSetting("AppId")}_is1'); 
    sUnInstallString := ''; 
    if not RegQueryStringValue(HKLM, sUnInstPath, 'UninstallString', sUnInstallString) then 
    RegQueryStringValue(HKCU, sUnInstPath, 'UninstallString', sUnInstallString); 
    Result := sUnInstallString; 
end; 


///////////////////////////////////////////////////////////////////// 
function IsUpgrade(): Boolean; 
begin 
    Result := (GetUninstallString() <> ''); 
end; 


///////////////////////////////////////////////////////////////////// 
function UnInstallOldVersion(): Integer; 
var 
    sUnInstallString: String; 
    iResultCode: Integer; 
begin 
// Return Values: 
// 1 - uninstall string is empty 
// 2 - error executing the UnInstallString 
// 3 - successfully executed the UnInstallString 

    // default return value 
    Result := 0; 

    // get the uninstall string of the old app 
    sUnInstallString := GetUninstallString(); 
    if sUnInstallString <> '' then begin 
    sUnInstallString := RemoveQuotes(sUnInstallString); 
    if Exec(sUnInstallString, '/SILENT /NORESTART /SUPPRESSMSGBOXES','', SW_HIDE, ewWaitUntilTerminated, iResultCode) then 
     Result := 3 
    else 
     Result := 2; 
    end else 
    Result := 1; 
end; 

///////////////////////////////////////////////////////////////////// 
procedure CurStepChanged(CurStep: TSetupStep); 
begin 
    if (CurStep=ssInstall) then 
    begin 
    if (IsUpgrade()) then 
    begin 
     UnInstallOldVersion(); 
    end; 
    end; 
end; 
+1

永遠不要在'{app}'這樣的文件夾上做一個通配符刪除通配符!如果用戶安裝在'C:\ Windows \'中,該怎麼辦?恭喜你,你剛升級時就已經消滅了他們的Windows安裝。 – Deanna

+0

哦,你確定你有'{userappdata} \ Roaming'和'{commonappdata} \ Romaing'嗎? 「{userappdata}」已經在漫遊配置文件中,「{commonappdata}」是系統特定的,漫遊文件夾沒有任何意義。 – Deanna

+0

@Deanna它只會從你的應用中刪除Windows目錄中的文件,而不是整個窗口,但自從你提到,如果他們是techdumb他們的Windows將很快消失 – Marko29

回答

2

雖然創新科技可以從用戶的配置文件運行卸載刪除文件,也不能碰任何其他用戶的個人資料。

如果用戶試圖運行卸載程序是一個有限的用戶,它會詢問管理員的詳細信息,因此任何常量都將解析爲管理員用戶,而不是受限用戶。

在這種情況下,您的最佳選擇是保留用戶的任何配置和數據,以防他們想重新安裝或具有漫遊配置文件。還請注意,在上面的代碼中,舊版本在升級過程中被刪除,這將觸發「刪除所有用戶的數據」選項。我敢肯定,這不是你想要的...

+0

雖然我一般同意這一點,但它並沒有真正幫助我,對不起。首先,我只會在需要時刪除用戶數據,例如:存儲在該文件夾中的設置文件變得非常不同,以至於如果不刪除,它可能導致應用程序崩潰。如果你將設置保存在你的應用程序文件夾中,那麼大多數Windows配置都不會讓你的應用程序寫入該文件,並且如果將此文件保存在設置文件夾中,則無法將其刪除,耶穌! – Marko29

+0

如果它是全球性的(這相當於在應用程序文件夾中),您可以刪除它。由於許多用戶可能已經運行過,因此每個用戶都是不可能的,並且該文件可能位於許多位置,也可能是其他機器。修復您的應用程序不會崩潰,如果設置無效:) – Deanna