zoukankan      html  css  js  c++  java
  • windows服务启动有界面的程序

    大家写windows服务守护进程的时候,肯定会遇到启动的程序看不到界面,只能在任务管理器里面看到xxx.exe问题.

    发现可能有如下情况

    a.无论是开机,还是程序被关掉后,守护服务启动的程序只能看到任务管理器exe的进程,看不到界面;

    b.开机后,守护服务自动启动程序,只能看到进程里面有exe进程,看不到界面,但是杀掉进程重启后,能看到界面;


    我来给出解决方法:
    1.服务中的启动程序代码用如下方法:

                    string appStartPath = @"C:Test.exe";
                    IntPtr userTokenHandle = IntPtr.Zero;
                    ApiDefinitions.WTSQueryUserToken(ApiDefinitions.WTSGetActiveConsoleSessionId(), ref userTokenHandle);
    
                    ApiDefinitions.PROCESS_INFORMATION procInfo = new ApiDefinitions.PROCESS_INFORMATION();
                    ApiDefinitions.STARTUPINFO startInfo = new ApiDefinitions.STARTUPINFO();
                    startInfo.cb = (uint)Marshal.SizeOf(startInfo);
    
                    ApiDefinitions.CreateProcessAsUser(
                        userTokenHandle,
                        appStartPath,
                        "",
                        IntPtr.Zero,
                        IntPtr.Zero,
                        false,
                        0,
                        IntPtr.Zero,
                        null,
                        ref startInfo,
                        out procInfo);
    
                    if (userTokenHandle != IntPtr.Zero)
                        ApiDefinitions.CloseHandle(userTokenHandle);
    
                        
    
    

      

    需要下载Cjwdev.WindowsApi.dll,很多资源,自己baidu去下载

    2.必须要有一个开机不输入密码就可以登录的用户,使用命令control userpasswords2设置.

    以上很简单的两点,我是测试过好多次了.发现是这个规律的时候,我不会告诉我你,我是多么的兴奋.[当时我在本地的机器上,着确实是成功了的]

    有人写了代码后,可能认为不需要用第二点中增加自动登录的用户,那可能是本机只有一个用户造成的(没有测试,推测).
    需要这种守护进程的电脑,一般都是服务器,而服务器一般都是远程操作.而且客户一般不会给你administrator账户,而是给你一个其他的账户.
    (一般客户只看程序的界面,不会去查看进程,所以,没有界面,他就觉得程序没有启动.)
    所以上面这种情况,是万恶的客户逼我做出来的,然后是我苦逼的做了各种实验得到的结果.

    别忘记点赞.

    ==========================

    补充:

    上面的问题解决方法有时候在某些机器上不行.不过在本机确实是测试通过的,然后在服务器上设置后,依然不行.

    又给出一种新的解决方法:在服务器安装vnc服务端.(大家觉得很奇怪吧,不过这方法真的可行).

    注意:VNC不可用remote安装的哦,必须插上显示器,鼠标键盘,亲自登陆到机器上安装.

    ========================

    以下为其他网友的解决方法,没有验证过.你可以尝试

    http://www.cnblogs.com/qfb620/archive/2009/08/05/1539557.html

  • 相关阅读:
    【luogu】 P1433 吃奶酪
    【noip 2016】 组合数问题(problem)
    【清北学堂】 死亡(death)
    【noip 2004】 合并果子
    微信小程序:每个邮箱仅能申请一个小程序
    Babel-polyfill 的作用
    react.js中模拟事件总线,子组件调用父组件时,发挥作用
    多行文本溢出显示省略号(…) text-overflow: ellipsis ------------- webkit-line-clamp 多行文字溢出...
    es6-class
    ES6--promise
  • 原文地址:https://www.cnblogs.com/birds-zhu/p/5794212.html
Copyright © 2011-2022 走看看