簡體   English   中英

MSI安裝程序取消無效

[英]MSI installer cancel not working

我有一個MSI安裝程序(設置項目),該安裝程序實際上是通過system.diagnostic.process調用Windows Forms exe的。

此表單實際上從用戶處獲取輸入以在sql server中還原.bak文件。

但是,如果發生任何異常,我將無法取消設置。 即使單擊安裝程序的取消按鈕,安裝回滾也不會開始。

請建議如何處理。

創建調用Windows窗體exe的新項目並向其添加安裝程序類,或者僅將安裝程序類添加至Windows窗體exe(您必須更改其輸出類型並對其進行一些修改,因此,例如,沒有Main()方法或未設置啟動對象,並且從安裝操作內部調用了表單)

安裝程序類應如下所示:

[RunInstaller(true)]
public  partial class Installer1 : System.Configuration.Install.Installer
{
    public Installer1()
    {
        InitializeComponent();
    }
    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
    public override void Install(IDictionary stateSaver)
    {
        base.Install(stateSaver);
        // Do your magic here, call your form, do your thing...

    }
 [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
    public override void Commit(IDictionary savedState)
    {

        base.Commit(savedState);
    }

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
    public override void Rollback(IDictionary savedState)
    {
        // if something goes wrong, it's here you correct it and rollback the system to its previous state and undo what you already changed
        base.Rollback(savedState);
    }

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
    public override void Uninstall(IDictionary savedState)
    {
        // Here you undo changes when you cancel
        base.Uninstall(savedState);
    }

}

准備好安裝程序項目后,轉到設置項目“自定義操作”,然后將安裝程序項目的主要輸出添加到其安裝,提交,回滾和卸載“文件夾”中。

另一個有用的事情是獲取應用程序的安裝目錄,並將其路徑傳遞給安裝程序類。 您可以將自定義操作的CustomActionData屬性設置為

/INSTALLDIR="[TARGETDIR]\"

並在安裝程序類中使用以下命令獲取目錄:

Context.Parameters["INSTALLDIR"]

編輯:如果在Install方法中引發異常,則安裝將被取消。 據我所知,這是“取消”中間安裝的唯一方法。 您必須創建一個異常並將其引發。例如:

If (SomethingWentWrong) throw new Exception("My exception description")

當然,如果異常是由別的東西拋出的(我是說,不是您故意創建的),回滾也應開始。 但是,如果您進行一些自定義更改,則必須從自定義操作的安裝程序的install方法中拋出該更改。

抱歉,如果我太詳細了,但是我在這方面遇到了麻煩,所以如果我能幫助某人避免它,我會很高興的:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM