Как правильно получить настройки UILevel в классе установщика - PullRequest
0 голосов
/ 23 сентября 2011

Я пытаюсь следовать коду по этой ссылке , чтобы определить в моем классе установщика, была ли установка выполнена без вывода сообщений. Но я должен делать что-то не так, потому что Context.Parameters ["UILevel"], кажется, не содержит значения.

В моем проекте установки я добавил настраиваемое действие при установке, где я передал / UILevel = "[UILevel]" в поле CustomActionData. Затем я связал это настраиваемое действие с первичным выходом проекта установщика dll, который содержит класс установщика ниже:

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);
    }
    }
 }

Я подумал, что если я добавлю настраиваемое действие при установке, я должен получить Context.Parameters ["UILevel"] в переопределении установки. Но Context.Parameters ["UILevel"] никогда не заполняется. Я также попытался получить его в конструкторе класса, но он выбрасывает nullref и в событии commit, но все равно ничего.

Как я могу правильно получить это значение?

1 Ответ

0 голосов
/ 23 сентября 2011

Я решил, что он корректно получает значение UILevel в обработчике событий AfterInstall.

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

Это имеет смысл - он заполняет значение из пользовательского действия Установить и извлекает его в AfterInstall.

...