开发者

how to correctly retrieve setup UILevel in installer class

I am trying to follow the code at this link in order to determine in my installer class if the setup is ran as silent. But I must开发者_StackOverflow社区 be doing something wrong, because the Context.Parameters["UILevel"] seems to contain no value.

In my setup project, I added a custom action on Install, where I passed /UILevel="[UILevel]" into CustomActionData field. I then linked this custom action to the primary output of the installer dll project, which contains the installer class below:

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Linq;

namespace CustomActionLibrary
{
[RunInstaller(true)]
public partial class MyInstaller : Installer
{
    string uiLevelString = string.Empty;
    public bool IsSilentInstall
    {
        get 
        {
            if (!String.IsNullOrEmpty(uiLevelString))
            {
                int level = Convert.ToInt32(uiLevelString);
                return level <= 3;
            }
            else
                return false;
        }
    }

    public MyInstaller()
    {
        InitializeComponent();
    }

    public override void Install(IDictionary stateSaver)
    {
        base.Install(stateSaver);
        uiLevelString = Context.Parameters["UILevel"];
    }

    public override void Commit(IDictionary savedState)
    {
        //System.Diagnostics.Process.Start("http://www.google.ro?q=" + uiLevelString);
        if (IsSilentInstall)
        {
            //do stuff here if it's silent install.
        }
        base.Commit(savedState);
    }
    }
 }

I thought that if I add the custom action on Install, I should retrieve Context.Parameters["UILevel"] in the Install override. But Context.Parameters["UILevel"] never gets populated. I also tried retrieving it on the constructor of the class but it throws nullref, and in the commit event, but still nothing.

How could I properly retrieve this value?


I solved it, it's retrieving the UILevel value correctly on the AfterInstall event handler.

    private void SecureUpdaterInstaller_AfterInstall(object sender, InstallEventArgs e)
    {
        uiLevelString = this.Context.Parameters["UILevel"];
        System.Diagnostics.Process.Start("http://www.google.ro?q=afterInstall_" + uiLevelString);
    }

It makes sense - it's populating the value from the Install custom action, and it's retrieving it on AfterInstall.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜