我用C#做了一个服务用作启动一些外部程序,但只启动了外部程序的进程没有相应的窗体,
即使像下面的控制我也写了,还是不行
pro.StartInfo.WindowStyle = ProcessWindowStyle.Normal ;
求解啊!

解决方案 »

  1.   

    我在c++用的,你试着改一下。
    BOOL CTestDlg::RunFile()
    {
    LPCTSTR path="d:\\a.exe";
    WinExec(path,SW_SHOWNORMAL);
    STARTUPINFO si;  

    memset(&si,0,sizeof(STARTUPINFO));  
    si.cb=sizeof(STARTUPINFO);  
    si.dwFlags=STARTF_USESHOWWINDOW;  
    si.wShowWindow=SW_SHOW;  

    PROCESS_INFORMATION pi;  
    if(!CreateProcess(NULL,"C:\\Program Files\\Internet Explorer\\iexplore.exe",NULL,NULL,false,0,NULL,NULL,&si,&pi))  
    {  
    //cout<<"Create Fail!"<<endl;  
    exit(1);  
    }
    return TRUE;
    }
      

  2.   

    2楼说的应该是pro.StartInfo.CreateNoWindow = false;
    一样的,主要是同样的代码在winfrm中能让外部的程序窗体出现,但在windows service中就不行了,只有进程没有窗体
      

  3.   

    System.Diagnostics.ProcessStartInfo t
    System.Diagnostics.Process.Start(t)
      

  4.   

    Process.Start(path),这样也不行?
      

  5.   

    管理工具下服务中找到service.
    属性选中  允许服务与桌面交互。
      

  6.   

    我之前也写过这样的程序。
    1、服务启动的时候,桌面还没有启动。也就是shell没有得到活动可用的Token,也就是8楼说的与桌面交互。
    2、可以强行获取,在没有登录桌面的时候就能通过帐号密码得到token,但好像在2003服务器上无法在桌面上看到程序,xp上可以。所以这个方法不是万能的。
    3、后来我就不用服务来启动窗体了。服务就是服务,提供数据的处理,可以在不登陆服务器的情况下使用。