windows服务启动有界面的程序

大家写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

windows服务启动有界面的程序的相关文章

C# windows服务启动winform程序不显示UI问题解决

由于工作需要写一个解决winform程序自动更新下载重启的自动更新程序,之前用控制台全部实现,然而换成windows  service出现了两个问题,一个是路径问题(http://baidu.com),一个是服务启动其他winform程序不显示UI问题. 本篇解决UI显示问题. 以下为引用尤尼博文(原文地址:http://www.cnblogs.com/luxilin/p/3347212.html): 我开发的系统中有一接口程序(这里就称Task,是一个C#的Console Applicatio

C#判断程序是由Windows服务启动还是用户启动

在Windows系统做网络开发,很多时候都是使用Windows服务的模式,但在调度阶段,我们更多的是使用控制台的模式.在开发程序的时候,我们在Program的Main入口进行判断.最初开始使用Environment.UserInteractive属性,在系统不系统服务的交互模式时,程序运行是正常的,但试过有Win7下,系统允许交互模式,结果在服务启动的时候,跳转到控制台的模式了,服务启动不起来.只能在服务的调用方式下带参数,然后在Main的参数中判断是否为服务方式.这在一般的情况下是可以解决问题

玩转Windows服务系列——Windows服务启动超时时间

最近有客户反映,机房出现断电情况,服务器的系统重新启动后,数据库服务自启动失败.第一次遇到这种情况,为了查看是不是断电情况导致数据库文件损坏,从客户的服务器拿到数据库的日志,进行分析. 数据库工作机制 要分析数据库启动失败的原因,首先说明一下数据库服务的工作机制. 数据库分为六大服务: 数据库的六大服务之间存在依赖关系,及启动流程: 服务自动启动失败原因 从客户那里,拿到了两份日志,一份是开机自启动的日志信息,此次数据库启动失败.另外一份是开机后,手动启动数据库服务的日志信息,此次数据库启动成功

Windows服务项目打包成安装包(Windows服务)-----------VS2017项目程序打包成.msi或者.exe

VS2017项目程序打包成.msi或者.exe Windows服务项目使用VS2017项目程序打包成.msi或者.exe安装包 项目打包成安装包(Windows服务) 1.安装打包插件:Microsoft Visual Studio 2017 Installer Projects 打开vs2017 ,选择 工具 --> 扩展和更新 --> 联机,搜索Microsoft Visual Studio 2017 Installer Projects,进行安装.安装好以后,重启vs2017 2.新建程

Delphi启动/停止Windows服务,启动类型修改为"自动"

unit U_StartServices; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, WinSVC, StdCtrls; type TForm1 = class(TForm) btn_StartServices: TButton; btn_StopServices: TButton; procedure btn_StartServicesCl

mongodb配置windows服务启动

第一步 下载MongoDB http://www.mongodb.org/downloads 第二步 解压到D:\mongodb\目录下,为了命令行的方便,可以把D:\mongodb\bin加到系统环境变量的path中了. 第三步 创建D:\mongodb\data\db以及D:\mongodb\logs\mongodb.log 第四步 启动MongoDB 命令提示符中  D:\mongodb\bin>mongod.exe --dbpath=d:\mongodb\data 第五步 安装WINDO

C# .net windows服务启动多个服务 ServiceBase

在windows服务中想要启动多个服务 ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { // new SyncService(), new DataMoveService(), }; ServiceBase.Run(ServicesToRun); 但是发现每次都只启动了数组中的第一个服务,其他服务的onstart方法都没有执行, 查找资料后发现,问题有两个 1.需要在ProjectInstaller中没有添加安装项

tomcat作为windows服务启动失败解决方法

再使用如下方法注册windows服务时,出现问题: 1 set CATALINA_BASE=E:\tomcat\tomcat-web-server 2 set CATALINA_HOME=E:\tomcat\tomcat-web-server 3 call E:\tomcat\tomcat-web-server\bin\service.bat install tomcat-web-server 原因是CATALINA_BASE路径设置错了,尾部包含了空格,要格外注意.

MongoDB注册Windows服务启动

下载MongoDB安装到:E:\Work_App\MongoDB 这个目录 安装:E:\Work_App\MongoDB (安装在专门的目录中) 配置: 1.在E:\Work_App\MongoDB\下新建Data文件夹 2.在E:\Work_App\MongoDB\Data下新建db和log文件夹 3.在E:\Work_App\MongoDB\Data\log下新建MongoDB.log文件 启动MongoDB: 进入E:\Work_App\MongoDB\bin, 输入:mongod -db