[英]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.