我有一個自定義操作,通過Windows安裝程序添加/刪除受信任的根證書中的證書。我通過實現這一CustomAction如何取消並回滾VS2010 Windows Installer中的自定義操作?
這有可能是用戶可能沒有權限證書添加到TrustedRoots,或者他們可以選擇「取消」,我怎麼回滾以前的行爲,並告訴安裝程序,我取消了這個過程?
現在,Windows Installer始終報告成功響應,即使失敗。
我有一個自定義操作,通過Windows安裝程序添加/刪除受信任的根證書中的證書。我通過實現這一CustomAction如何取消並回滾VS2010 Windows Installer中的自定義操作?
這有可能是用戶可能沒有權限證書添加到TrustedRoots,或者他們可以選擇「取消」,我怎麼回滾以前的行爲,並告訴安裝程序,我取消了這個過程?
現在,Windows Installer始終報告成功響應,即使失敗。
你必須讓你的自定義操作的一個函數的返回類型的ActionResult這樣你可以返回的故障類型,如果取消或發生其他異常。
using Microsoft.Deployment.WindowsInstaller;
namespace CustomAction1
{
public class CustomActions
{
[CustomAction]
public static ActionResult ActionName(Session session)
{
try
{
session.Log("Custom Action beginning");
// Do Stuff...
if (cancel)
{
session.Log("Custom Action cancelled");
return ActionResult.Failure;
}
session.Log("Custom Action completed successfully");
return ActionResult.Success;
}
catch (SecurityException ex)
{
session.Log("Custom Action failed with following exception: " + ex.Message);
return ActionResult.Failure;
}
}
}
}
注意:這是一個WIX兼容的自定義操作。我發現WIX可以更好地控制MSI的創建。
-1 ..我不認爲這適用於產生MSI的Windows安裝項目。我沒有使用MVC,也沒有使用任何與網絡相關的技術。我誤解了嗎? – LamonteCristo
@ makerofthings7:我們使用這個爲我們的Wix創建MSI安裝程序。它不限於MVC或網絡相關技術。但是,它需要安裝wix:http://www.advancedinstaller.com/user-guide/qa-c-sharp-ca.html –
@ makerofthings7:這是wix兼容的自定義操作。沒有在您的問題中看到有關Windows安裝項目的具體提及。 –
這隻能通過返回1602從win32 DLL或VBScript自定義操作完成。如果您使用EXE或安裝程序類操作,則任何非零返回值都將被視爲失敗。
我正在尋找示例代碼。我重寫什麼來運行我的自定義代碼?在重寫中,我是否在代碼之前或之後調用'BaseObject.OverrideAction()'? – LamonteCristo
覆蓋由安裝程序類操作使用。您需要一個win32 DLL或VBScript自定義操作。您可以在這裏找到一個C++ DLL自定義動作教程:http://www.codeproject.com/KB/install/msicustomaction.aspx –
我是一位.NET開發人員,他爲我的開發人員提供了分散的MSFT文檔。我發現很難相信win32或VB腳本是* only *的方式......我對C#感興趣的方式 – LamonteCristo
嘗試拋出InstallException。在這種情況下,安裝程序將檢測到安裝和回滾操作錯誤。
public override void Commit(IDictionary savedState)
{
base.Commit(savedState);
Console.WriteLine("Commit ...");
// Throw an error if a particular file doesn't exist.
if(!File.Exists("FileDoesNotExist.txt"))
throw new InstallException();
// Perform the final installation if the file exists.
}
我應該在哪裏拋出這個異常? (在哪個重寫?)我應該在我的自定義代碼之前還是之後調用'Base.SomeAction()'? – LamonteCristo
我不確定在您的代碼中,但可能在您驗證權限的位置(如果您的自定義代碼中包含此類部分),或者在添加證書失敗之後捕獲異常。如[此處](http://msdn.microsoft.com/en-us/library/system.configuration.install.installexception.aspx)所述,可以在任何重寫事件上引發此異常。 – Samich
這是完美的。你能告訴我什麼是在拋出InstallException時調用的嗎?應用程序是「卸載」還是必須具有清理功能? – LamonteCristo
我有興趣瞭解如何在安裝程序中添加/刪除證書,如果您不介意的話。 – jp2code
@ jp2code只要系統允許我登錄,我就會立即發佈到http://xbapcertsetup.codeplex.com(codeplex今天有問題嗎?) – LamonteCristo