2010-03-05 88 views
2

我正在使用Inno Setup進行安裝。我想密碼保護卸載。所以我的計劃是在安裝過程中要求卸載密碼,並將其保存到文件中。在卸載時,要求用戶輸入密碼並比較密碼。使用Inno Setup進行密碼保護卸載

我找不到讓用戶在卸載時輸入密碼的方法,有沒有辦法?

回答

1

密碼保護卸載不起作用,因爲用戶可以簡單地手動刪除您的文件。這意味着在Inno Setup中確實沒有內置選項來執行此操作。

如果您想要嘗試此操作,則可以使用InitializeUninstall事件函數詢問用戶密碼並在不匹配時返回False。這將中止卸載程序。

+0

我不能找到一種方法,讓用戶在卸載輸入密碼(我試圖用CreateInputQueryPage但它給錯誤)。如何把輸入從用戶卸載時? – Navaneeth 2010-04-05 12:23:08

-1

您可以在Inno Setup幫助中檢查「CheckPassword」功能。

+0

'CheckPassword'僅在安裝程序中使用,不在卸載程序中使用。 – 2016-06-03 06:16:07

1

一些Inno Setup用戶要求在卸載軟件的用戶可能之前要求輸入密碼。例如,反病毒軟件可能會成爲這種需求的候選者。 下面的代碼顯示瞭如何創建表單,要求輸入密碼,並且只有在密碼正確的情況下才能卸載軟件。 這種方法非常弱,很容易找到密碼。所以,想要使用這種策略來保護軟件免於卸載的人需要編寫更安全的代碼。如果用戶想要卸載並且不知道密碼文件可以從應用程序的文件夾中刪除。在本示例中,卸載密碼爲removeme

[Setup] 
AppName=UninsPassword 
AppVerName=UninsPassword 
DisableProgramGroupPage=true 
DisableStartupPrompt=true 
DefaultDirName={pf}\UninsPassword 

[Code] 
function AskPassword(): Boolean; 
var 
    Form: TSetupForm; 
    OKButton, CancelButton: TButton; 
    PwdEdit: TPasswordEdit; 
begin 
    Result := false; 
    Form := CreateCustomForm(); 
    try 
    Form.ClientWidth := ScaleX(256); 
    Form.ClientHeight := ScaleY(100); 
    Form.Caption := 'Uninstall Password'; 
    Form.BorderIcons := [biSystemMenu]; 
    Form.BorderStyle := bsDialog; 
    Form.Center; 

    OKButton := TButton.Create(Form); 
    OKButton.Parent := Form; 
    OKButton.Width := ScaleX(75); 
    OKButton.Height := ScaleY(23); 
    OKButton.Left := Form.ClientWidth - ScaleX(75 + 6 + 75 + 50); 
    OKButton.Top := Form.ClientHeight - ScaleY(23 + 10); 
    OKButton.Caption := 'OK'; 
    OKButton.ModalResult := mrOk; 
    OKButton.Default := true; 

    CancelButton := TButton.Create(Form); 
    CancelButton.Parent := Form; 
    CancelButton.Width := ScaleX(75); 
    CancelButton.Height := ScaleY(23); 
    CancelButton.Left := Form.ClientWidth - ScaleX(75 + 50); 
    CancelButton.Top := Form.ClientHeight - ScaleY(23 + 10); 
    CancelButton.Caption := 'Cancel'; 
    CancelButton.ModalResult := mrCancel; 
    CancelButton.Cancel := True; 

    PwdEdit := TPasswordEdit.Create(Form); 
    PwdEdit.Parent := Form; 
    PwdEdit.Width := ScaleX(210); 
    PwdEdit.Height := ScaleY(23); 
    PwdEdit.Left := ScaleX(23); 
    PwdEdit.Top := ScaleY(23); 

    Form.ActiveControl := PwdEdit; 

    if Form.ShowModal() = mrOk then 
    begin 
     Result := PwdEdit.Text = 'removeme'; 
     if not Result then 
      MsgBox('Password incorrect: Uninstallation prohibited.', mbInformation, MB_OK); 
    end; 
    finally 
    Form.Free(); 
    end; 
end; 


function InitializeUninstall(): Boolean; 
begin 
    Result := AskPassword(); 
end; 

來源: http://www.vincenzo.net/isxkb/index.php?title=Require_an_uninstallation_password