【问题标题】:C# external tool for SSMS - Reading from stdinSSMS 的 C# 外部工具 - 从标准输入读取
【发布时间】:2009-01-02 10:49:49
【问题描述】:

我正在尝试编写一个利用 SQL Server Management Studio 的外部工具功能的应用程序。

要指定外部工具,您可以输入应用程序的路径并指定一些参数以通过 STDIN 传递给应用程序。

目前我只有一个显示参数的表单。每次我运行外部工具时,我都会得到一个新的应用程序实例。

理想情况下,我希望第一次运行该工具来加载应用程序,然后每次运行都从 STDIN 获取参数并对其进行处理,而无需创建应用程序的新实例。

有什么我可以做的可以允许这个,还是我被很多窗口卡住了?

提前致谢

【问题讨论】:

    标签: c# stdin ssms


    【解决方案1】:

    虽然听起来很可怕,但您可以利用 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());
        }
    

    这个小 sn-p 的唯一问题是您在首次启动时获得的命令行参数包含应用程序名称,但在后续启动时不包含。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-30
      • 2012-02-17
      相关资源
      最近更新 更多