none
怎麽调试两个winform应用程序 RRS feed

  • 问题

  • 我的A winform应用程序启动 B winform应用程序

     B winform应用程序的入口点是这样的

            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main(string[] args)
            {
                ToolStripManager.VisualStylesEnabled = false;
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                string mainAppExe="";
                string updateLocation="";
                //MessageBox.Show(args[1]);
                //MessageBox.Show(args[0]);
                //if (args != null && args.Length > 0)
                //{
                //    mainAppExe = args[1];
                //    updateLocation = args[2];
                //}

                Application.Run(new FrmUpdate(mainAppExe, updateLocation));
            }

     

    A winform应用程序

            private void button1_Click(object sender, EventArgs e)
            {
                ProcessStartInfo processstartinfo = new ProcessStartInfo();
                processstartinfo.FileName = Path.Combine(Application.StartupPath, "AutoUpdate.exe");
                processstartinfo.Arguments = Application.StartupPath;
                processstartinfo.Arguments = "Sample";
                Process.Start(processstartinfo);  //启动自动更新程序

            }

    现在的问题是我在B winform应用程序里把

      //MessageBox.Show(args[1]);
                //MessageBox.Show(args[0]);
                //if (args != null && args.Length > 0)
                //{
                //    mainAppExe = args[1];
                //    updateLocation = args[2];
                //}

    这几句话不注释掉就无法启动,但是我要获取参数,如果注释掉这几句话我就无法获取参数,为什麽启动不了,怎麽调试这两个进程?

    2011年11月19日 13:30

答案

  • string[] args= new string[2] {Application.StartupPath, "Sample"};

    processstartinfo.Arguments =args;

     

    是这样吗?


    在运行一个程序的时候:

    "Program.exe" "Argment1" "Argment2"

    程序名称,以及所有参数是以空格为分界的。

    但是,如果你以 Process.Start 来执行, Process.exe 在 FileName 里指定。

    而 Argments 则指定运行参数。

    以你程序为例 Argments = Application.StartupPath + "<我是空格>" + "Sample";

     

    如果你的某个参数里有空格,那么整个参数加上引号;最好是所有参数都加上引号。


    我也有自己的签名档哦!
    2011年11月21日 2:38

全部回复

  • processstartinfo.Arguments = Application.StartupPath;
    processstartinfo.Arguments = "Sample";

    写错了。

    构造一个完整的字符串参数,然后赋值给 Arguments  。

     

    而且在你使用 Main 函数的 args 参数的时候,需要先检测这个数组的长度,然后获取元素,否则一旦索引不存在就直接异常了。


    我也有自己的签名档哦!
    2011年11月21日 1:32
  • string[] args= new string[2] {Application.StartupPath, "Sample"};

    processstartinfo.Arguments =args;

     

    是这样吗?

    2011年11月21日 2:22
  • 怎麽不行呢?

    2011年11月21日 2:28
  • string[] args= new string[2] {Application.StartupPath, "Sample"};

    processstartinfo.Arguments =args;

     

    是这样吗?


    在运行一个程序的时候:

    "Program.exe" "Argment1" "Argment2"

    程序名称,以及所有参数是以空格为分界的。

    但是,如果你以 Process.Start 来执行, Process.exe 在 FileName 里指定。

    而 Argments 则指定运行参数。

    以你程序为例 Argments = Application.StartupPath + "<我是空格>" + "Sample";

     

    如果你的某个参数里有空格,那么整个参数加上引号;最好是所有参数都加上引号。


    我也有自己的签名档哦!
    2011年11月21日 2:38
  • 好的我试一下,太感谢了
    2011年11月21日 10:20
  • 真的可以,太感谢您了

    2011年11月21日 10:29