码迷,mamicode.com
首页 > Windows程序 > 详细

windows服务启动有界面的程序

时间:2016-08-22 07:06:36      阅读:576      评论:0      收藏:0      [点我收藏+]

标签:

大家写windows服务守护进程的时候,肯定会遇到启动的程序看不到界面,只能看到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账户,而是给你一个其他的账户.
(一般客户只看程序的界面,不会去查看进程,所以,没有界面,他就觉得程序没有启动.)
所以上面这种情况,是万恶的客户逼我做出来的,然后是我苦逼的做了各种实验得到的结果.

别忘记点赞.

 

windows服务启动有界面的程序

标签:

原文地址:http://www.cnblogs.com/birds-zhu/p/5794212.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!