C # внешний инструмент для SSMS - чтение из стандартного ввода - PullRequest
0 голосов
/ 02 января 2009

Я пытаюсь написать приложение, которое использует функциональность внешних инструментов SQL Server Management Studio.

Чтобы указать внешний инструмент, вы можете ввести путь к приложению и указать некоторые аргументы для передачи приложению через STDIN.

В настоящее время у меня просто есть форма, которая отображает аргументы. Каждый раз, когда я запускаю внешний инструмент, я получаю новый экземпляр приложения.

В идеале, я бы хотел, чтобы в первый раз я запускал инструмент для загрузки приложения, и каждый последующий запуск брал аргументы из STDIN и что-то делал с ними БЕЗ создания нового экземпляра приложения.

Могу ли я что-нибудь сделать, чтобы это разрешить, или я застрял с множеством окон?

Заранее спасибо

1 Ответ

0 голосов
/ 02 января 2009

Как бы ужасно это не звучало, вы можете использовать Microsoft.VisualBasic.ApplicationServices, чтобы сделать это действительно простым (вы можете добавить ссылку на Microsoft.VisualBasic в свой проект на c #).

В качестве быстрого примера вы можете создать новый проект 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());
    }

Единственный недостаток этого небольшого фрагмента заключается в том, что аргументы командной строки, которые вы получаете при первом запуске, включают имя приложения, но не включаются при последующих запусках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...