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

 

转载于:https://www.cnblogs.com/birds-zhu/p/5794212.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值