你们写windows服务守护进程的时候,确定会遇到启动的程序看不到界面,只能在任务管理器里面看到xxx.exe问题.html
发现可能有以下状况windows
a.不管是开机,仍是程序被关掉后,守护服务启动的程序只能看到任务管理器exe的进程,看不到界面;服务器
b.开机后,守护服务自动启动程序,只能看到进程里面有exe进程,看不到界面,可是杀掉进程重启后,能看到界面;app
我来给出解决方法:
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设置.ui
以上很简单的两点,我是测试过好屡次了.发现是这个规律的时候,我不会告诉我你,我是多么的兴奋.[当时我在本地的机器上,着确实是成功了的]spa
有人写了代码后,可能认为不须要用第二点中增长自动登陆的用户,那多是本机只有一个用户形成的(没有测试,推测).
须要这种守护进程的电脑,通常都是服务器,而服务器通常都是远程操做.并且客户通常不会给你administrator帐户,而是给你一个其余的帐户.
(通常客户只看程序的界面,不会去查看进程,因此,没有界面,他就以为程序没有启动.)
因此上面这种状况,是万恶的客户逼我作出来的,而后是我苦逼的作了各类实验获得的结果.htm
别忘记点赞.blog
==========================进程
补充:
上面的问题解决方法有时候在某些机器上不行.不过在本机确实是测试经过的,而后在服务器上设置后,依然不行.
又给出一种新的解决方法:在服务器安装vnc服务端.(你们以为很奇怪吧,不过这方法真的可行).
注意:VNC不可用remote安装的哦,必须插上显示器,鼠标键盘,亲自登录到机器上安装.
========================
如下为其余网友的解决方法,没有验证过.你能够尝试
http://www.cnblogs.com/qfb620/archive/2009/08/05/1539557.html