2009-01-02 63 views
0

我正在尝试编写一个应用程序,它利用SQL Server Management Studio的外部工具功能。用于SSMS的C#外部工具 - 从stdin读取

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

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

理想情况下,我希望我第一次运行该工具来加载应用程序,并且每个后续运行都需要从STDIN获取参数并对其执行某些操作,而无需创建应用程序的新实例。

有什么我可以做的,可以让这个,或者我坚持与很多的窗户?

在此先感谢

回答

0

尽管听起来很可怕,你可以利用Microsoft.VisualBasic.ApplicationServices使这个非常简单的(你可以添加在你的C#项目Microsoft.VisualBasic程序的引用)。

作为一个简单的例子,你可以创建一个新的C#的WinForms项目和修改Program.cs中看起来是这样的:在Form1

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()); 
    } 
} 

然后扔在那里的标签和一个小的代码显示它的工作:

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

     label1.Text = output; 
    } 

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

与这个小片段的唯一的小问题,就是你第一次启动命令行参数包括应用程序的名称,但它不包括在后续推出。