0

インストーラー クラスでセットアップがサイレント モードで実行されているかどうかを判断するために、このリンクのコードをたどろうとしています。しかし、 Context.Parameters["UILevel"] には値が含まれていないように見えるため、何か間違ったことをしているに違いありません。

私のセットアップ プロジェクトでは、Install にカスタム アクションを追加し、/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);
    }
    }
 }

Install にカスタム アクションを追加する場合は、Install オーバーライドで Context.Parameters["UILevel"] を取得する必要があると考えました。ただし、 Context.Parameters["UILevel"] は入力されません。私もクラスのコンストラクターでそれを取得しようとしましたが、nullref をスローし、コミット イベントではまだ何もしません。

この値を正しく取得するにはどうすればよいですか?

4

1 に答える 1

0

私はそれを解決しました、それはAfterInstallイベントハンドラーでUILevel値を正しく取得しています。

    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で取得します。

于 2011-09-23T03:58:21.263 に答える