3

Visual Studio 2013 に、ソリューション用の .msi インストーラーを作成するセットアップおよび配置プロジェクトがあります。Install Custom Action で起動する C# WinForms アプリもあります。ユーザーがコマンド ラインから .msi を起動する場合、カスタム アクションのインストール中に実行されるアプリにコマンド ライン引数を渡す方法はありますか?

CustomActionData パラメーターを使用して Install Custom Action アプリの引数を指定できることはわかっているので、それを .msi 引数が何であれ動的に設定することはできますか? または、これを行うためのより簡単な/より良い方法はありますか?

どんな助けでも大歓迎です。

4

2 に答える 2

2

インストーラー クラスをアプリに追加して、Installメソッドをオーバーライドできます。その後、プロパティのコマンド ライン パラメーターにアクセスできますContext.Parameters

[RunInstaller(true)]
public class CustomInstaller : System.Configuration.Install.Installer
{
    public override void Install(IDictionary stateSaver)
    {
        base.Install(stateSaver);
        //this.Context.Parameters contains the command line arguments
    }
}

詳細については、ドキュメントを参照してください。

于 2016-11-04T20:50:31.937 に答える
1

「コマンドライン引数」の意味によって異なりますが、次のようなプロパティ値を意味していると思います。

msiexec /I [msi へのパス] MYPROP1=THIS MYPROP2=THAT

MYPROP1 と MYPROP2 の値をカスタム アクションに渡します。

したがって、実行可能ファイルをカスタム アクションとして追加するだけです。カスタム アクションのプロパティ ウィンドウには、Arguments 設定があります。次の値を指定すると:

[MYPROP1];[MYPROP2]

これらはインストール時に実際の値に解決され、コマンド ラインに渡されます。次のように、コマンド ラインで想定される形式を使用します。

/one=[MYPROP1] /two=[MYPROP2] など。

アプリを Everyone インストールからカスタム アクションとして実行することは、常に役立つとは限りません。これは主に、アプリがローカル システム アカウントで実行されるため、インストールしているユーザーのフォルダー、一部のデータベース、ネットワークなどにアクセスできないためです。何かを構成している場合は、アプリを初めて実行するときに実行する方がよい場合が多く、通常のインタラクティブなユーザー コンテキストで実行されます。

于 2016-11-07T19:42:21.820 に答える