环境:Windows Server 2003
在系统服务中,采用CreateProcess启动应用程序,在进程管理中,看到相关进程启动,但是无法看到界面。
hScm=OpenSCManager(0, 0, SC_MANAGER_CREATE_SERVICE);
hService=CreateService(
  hScm,
  _T("ServiceTest"),
  _T("ServiceTest"),
  SERVICE_ALL_ACCESS,
  SERVICE_INTERACTIVE_PROCESS | SERVICE_WIN32_OWN_PROCESS,
  SERVICE_AUTO_START,
  SERVICE_ERROR_NORMAL,
  "c:\\ServiceTest.exe",
  0,0,0,0,0
);PROCESS_INFORMATION pi;
STARTUPINFO sti;
ZeroMemory(&sti,sizeof(sti));
sti.cb=sizeof(sti);
sti.lpDesktop= "WinSta0\\Default";
CreateProcess(strCmd,NULL,NULL,NULL,FALSE,0,NULL,NULL,&sti,&pi);我在XP下测试的,是可以启动界面,就是在2003 Server上不行。

解决方案 »

  1.   

    加上下面的试试:
    sti.dwFlags = STARTF_USESHOWWINDOW;//标志wShowWindow参数有效
    sti.wShowWindow = SW_SHOW;
      

  2.   


    在XP下,是可以的。
    不知道什么在2003 Server下,就不行了。
      

  3.   

    XP上用交互式服务是可以的,我估计2003在这些细节地方有所不同,具体的还是去MSDN中去找吧。
      

  4.   

    这个问题经常出现
    OpenProcessToken
    DuplicateToken
    WTSGetActiveConsoleSessionId
    SetTokenInformation
    CreateProcessAsUser
      

  5.   


    如果安装的时候没有设置,是不行的(CreateService时的 SERVICE_INTERACTIVE_PROCESS
    )。我一直在用 Windows Server 2003 做开发环境。
    前些日子就做过,以 SYSTEM 权限启动登录用户进程,还真没遇到过你的问题。是不是你的程序由于未知原因阻塞了。
      

  6.   

    之前那个代码,却是能够在Windows 2003中启动可视化应用程序。
    但是界面的显示,只限于本机,之前我一直使用的是远程桌面,所以一直没有看到
      

  7.   

    解决方法已经找到。现在公布如下
    这都是“远程桌面”惹的祸。
    远程桌面客户端 mstsc 有一个 /console 参数,模式等同于本地终端显示器登录,/console 不会去占用非 /console 远程桌面,远程桌面允许两个正常连接和一个控制台/console方式连接,并且正常连接和 /console 连接的桌面操作不能相互看见,只有通过 /console 参数远程桌面连接到 Windows 2003 服务器,才能够看到弹出的 应用程序 窗口界面注:在 Windows XP SP3 以上版本,/console 参数改名为 /admin,需要用 mstsc /admin 启动远程桌面