none
关于C#在wince下cmd窗口问题 RRS feed

  • 问题

  • 为了实现cmd后台运行,在windows下可以通过如下代码

    Process p= new Process();

    /*略*/

    p.StartInfo.CreateNoWindow = true;

    p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 

    p.Start();

    可是在wince下,Process 没有提供这个属性。

    我该如何才能实现执行了cmd命令,不让cmd窗口弹出来呢?

    还有顺便一提。。。。cmd输出的信息,我要如何去获得呢。。。

    在windows下可以通过

    p.StartInfo.RedirectStandardOutput = true;
    p.Start(); 
    string output = p.StandardOutput.ReadToEnd();
    得到输出信息。。。。

    可是wince(T.T)下,又不提供这个方法和属性。。。。。

    现在好郁闷。。。。。。

    我该怎么办呢。。。。

     

    2011年1月28日 2:08

全部回复

  • 您好,

    您想在CMD里面实现什么样的功能,我们可以换一种方式达到目的。

    致礼


    Jesse Jiang [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年1月31日 9:07
    版主
  • 或许我可以把问题换成这样。。。我用C#改如何运行一个exe程序并得到它的输出值,在cmd窗口下,直接* 程序名.exe -参数名 参数值 *就运行那个程序了,但是在wince下我得不到他的输出信息

        (在windows下可以通过

    p.StartInfo.RedirectStandardOutput = true;
    p.Start(); 
    string output = p.StandardOutput.ReadToEnd();
    得到输出信息

    。。上文也提到过。。。我很无奈只有通过cmd命令将运行输出信息保存成txt文件。。然后去再去解析它。。。。现在问题是这一切都是后台默默地执行的,然后直接用Process 开启会弹出一个cmd窗口。。。。

    总之,我具体要实现的是,运行一个exe程序,并得到它的输出信息,然后这些都是后台执行的,不会对界面有啥影响(比如弹出一个窗口)。。。

    2011年2月7日 17:42
  • 貌似我找到个方法不过该方法有个参数让我感到很困惑

    [DllImport("coredll.dll", CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Auto)]
      static extern bool CreateProcess(
       string lpApplicationName,
       string lpCommandLine,
       IntPtr lpProcessAttributes,
       IntPtr lpThreadAttributes,
       bool bInheritHandles,
       uint dwCreationFlags,
       IntPtr lpEnvironment,
       string lpCurrentDirectory,
       IntPtr lpStartupInfo,
       out ProcessInfo lpProcessInformation
      );
            private void button1_Click(object sender, EventArgs e)
            {
                    
                    ProcessInfo pi; // no new required since ProcessInfo is a value type (struct)
                    CreateProcess(
                        "cmd.exe",
                        @"/c start wzctool.exe -e >acc.txt",
                        IntPtr.Zero,
                        IntPtr.Zero,
                        false,
                        0,
                        IntPtr.Zero,
                        null,
                        IntPtr.Zero,
                        out pi
                    );
           }

    当我这个参数输入为0时候,cmd窗口会闪一下,然后我改成了1,按下按钮后,界面无反应,txt文件也未生产,不过一关闭winform程序后,cmd窗口会闪一下txt文档也生成了,

    查了下msdn(http://msdn.microsoft.com/zh-cn/library/ms684863

    CREATE_NO_WINDOW   0x08000000

    The process is a console application that is being run without a console window. Therefore, the console handle for the application is not set.

    This flag is ignored if the application is not a console application, or if it is used with either CREATE_NEW_CONSOLE or DETACHED_PROCESS.

    这个参数原来的类型是DWORD dwCreationFlags 我查了下资料,DWORD在C#里面可以用uint代替,这个东西是2个双字节东西。。。

    0x08000000是一个十六进制数。。。。

    我编程基础不是很好。。。这里我不知该如何输入这个参数,才能到达CREATE_NO_WINDOW效果。。。。。

    我该如何是好啊。。。。

    2011年2月10日 7:30