0

SQL Server Management Studio の外部ツール機能を利用するアプリを作成しようとしています。

外部ツールを指定するには、アプリへのパスを入力し、STDIN 経由でアプリに渡す引数を指定します。

現在、引数を表示するフォームがあります。外部ツールを実行するたびに、アプリケーションの新しいインスタンスを取得します。

理想的には、ツールを初めて実行してアプリケーションをロードし、その後の各実行で STDIN から引数を取得し、アプリの新しいインスタンスを作成せずに何かを実行したいと考えています。

これを可能にするためにできることはありますか、それとも多くのウィンドウで立ち往生していますか?

前もって感謝します

4

1 に答える 1

0

恐ろしく聞こえるかもしれませんが、Microsoft.VisualBasic.ApplicationServices を利用して、これを非常に簡単にすることができます (C# プロジェクトに Microsoft.VisualBasic への参照を追加できます)。

簡単な例として、新しい C# WinForms プロジェクトを作成し、Program.cs を次のように変更できます。

class Program : WindowsFormsApplicationBase
{
    static Form1 mainForm = null;

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main(string[] commandline)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Program prog = new Program();
        prog.MainForm = mainForm = new Form1();
        prog.Run(commandline);
    }

    public Program()
    {
        this.IsSingleInstance = true;
    }

    protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs)
    {
        base.OnStartupNextInstance(eventArgs);
        mainForm.Startup(eventArgs.CommandLine.ToArray());
    }
}

次に、Form1 でそこにラベルをスローし、それが機能していることを示す小さなコードをスローします。

    public void Startup(string[] commandLine)
    {
        string output = "";
        foreach (string arg in commandLine)
            output += arg + "\n";

        label1.Text = output;
    }

    public Form1()
    {
        InitializeComponent();
        Startup(Environment.GetCommandLineArgs());
    }

この小さなスニペットの唯一の落とし穴は、最初の起動時に取得するコマンド ライン引数にアプリケーション名が含まれているが、それ以降の起動には含まれないことです。

于 2009-01-02T11:23:20.153 に答える