大家写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账户,而是给你一个其他的账户.
(一般客户只看程序的界面,不会去查看进程,所以,没有界面,他就觉得程序没有启动.)
所以上面这种情况,是万恶的客户逼我做出来的,然后是我苦逼的做了各种实验得到的结果.
别忘记点赞.
时间: 2024-10-17 19:58:18