windows服务下无法启动外部程序

做一个windows服务监听服务,涉及到windows服务启动外部程序的一个过程,但是调试测试发现,无法简单的用process.start()这种方法,

原因是在vista和win7这样的系统下,服务是运行在session 0,而基本上应用是运行在session 1,所以windows服务下无法启动process.start()。

网上看到windows服务下无法启动外部程序的原因,解决方案

1、在WinXP和Win2003环境中,安装服务后,右键单击服务“属性”-“登录”选项卡-选择“本地系统帐户”并勾选“允许服务与桌面交互”即可.

2、在Win7环境中,由于微软加强了权限管理,将此功能禁用,需要引用第三方dll,即Cjwdev.WindowsApi.dll

Cjwdev.WindowsApi.xml,dll下载链接:http://pan.baidu.com/share/link?shareid=159544&uk=3288736938

解决方法:使用这样一个第三方库,Cjwdev.WindowsApi.dll,能够从服务启动外部程序;

public static void Openlocalexe(string path)
{

int _currentAquariusProcessID;
/*appStartpath设置为全路径地址*/
string appStartpath = path;
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);
try
{
ApiDefinitions.CreateProcessAsUser(userTokenHandle, appStartpath, "", IntPtr.Zero, IntPtr.Zero, false, 0, IntPtr.Zero, null, ref startinfo, out procinfo);
if (userTokenHandle != IntPtr.Zero)
ApiDefinitions.CloseHandle(userTokenHandle);

_currentAquariusProcessID = (int)procinfo.dwProcessId;
}
catch (Exception exc)
{
Program.Log.Error(exc.Message);
//System.Runtime.InteropServices.Interop.ShowMessageBox(exc.Message, "Comfirm");
}
}

注意:要在windows服务里面去调用启动外部程序,并且外部程序不能使控制台程序,建议是winform.exe这样方便测试。

Windows服务启动进程----Cjwdev.WindowsApi.dll的更多相关文章

  1. windows服务启动有界面的程序

    大家写windows服务守护进程的时候,肯定会遇到启动的程序看不到界面,只能在任务管理器里面看到xxx.exe问题. 发现可能有如下情况 a.无论是开机,还是程序被关掉后,守护服务启动的程序只能看到任 ...

  2. windows 服务启动外部程序

    服务使用Process启动外部程序没窗体 在WinXP和Win2003环境中,安装服务后,右键单击服务“属性”-“登录”选项卡-选择“本地系统帐户”并勾选“允许服务与桌面交互”即可. 在Win7及以后 ...

  3. C#穿透session隔离———Windows服务启动UI交互程序

    在Windows服务里面启动其他具有界面的应用程序,需要穿透session隔离,尝试了很多种方法,都可行,现在一一列举下来,并写下几个需要注意的地方. 需要注意的地方 首先要将服务的Account属性 ...

  4. windows服务启动 1053错误

    1.问题描述 今天在启动一个Windows服务时,服务启动不了,且提示:1053错误 那么是什么导致了1053错误呢? 2.他山之石 百度了一下,发现有人作出下面的解释并给出了解决方法: “常常是因为 ...

  5. powershell脚本之windows服务与进程

    powershell脚本之windows服务与进程 服务与进程的区别: Windows服务是指系统自动完成的,不需要和用户交互的过程,可长时间运行的可执行应用程序 进程是程序运行的实例,系统会给运行中 ...

  6. Redis Windows 服务启动异常 错误码1067

    https://blog.csdn.net/after_you/article/details/62215163 Redis Windows 服务启动异常 错误码1067 下载了Redis 2.8.2 ...

  7. MongoDB做为一项windows服务启动

    MongoDB做为一项windows服务启动 Windows版本安装 MongoDB的官方下载站是http://www.mongodb.org/downloads,可以去上面下载最新的对应版本,有32 ...

  8. 玩转Windows服务系列——无COM接口Windows服务启动失败原因及解决方案

    将VS创建的Windows服务项目编译生成的程序,通过命令行 “服务.exe -Service”注册为Windows服务后,就可以通过服务管理器进行管理了. 问题 通过服务管理器进行启动的时候,发现服 ...

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

    最近有客户反映,机房出现断电情况,服务器的系统重新启动后,数据库服务自启动失败.第一次遇到这种情况,为了查看是不是断电情况导致数据库文件损坏,从客户的服务器拿到数据库的日志,进行分析. 数据库工作机制 ...

随机推荐

  1. luogu P5112 FZOUTSY

    传送门 毒瘤出题人,卡我常数 如果后缀排序后将两两之间height\(\ge k\)的后缀放在一组,那么每次询问的答案就是\(\sum_{i} \binom{num[i]}{2}\)(num[i]是第 ...

  2. D. Time to go back(思维)

    题目链接:http://codeforces.com/gym/100952/problem/D 题目大意:n个礼物,m个人,要给m个人中的k个人买大于等于d的礼物,其他人随意,问你选择礼物的方案数(不 ...

  3. DeepLearning.ai-Week4-Face Recognition for the Happy House

    1 - Task Implement the triplet loss function Use a pretrained model to map face images into 128-dime ...

  4. 对象关系映射(ORM)框架GreenDao简介和基本使用

    官网上的介绍,greenDAO 是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案. GreenDao特点 性能最大化,可能是Android平台上最快的ORM框架 易于使用的A ...

  5. 20165234 《Java程序设计》第七周学习总结

    第七周学习总结 教材内容学习 第十一章 JDBC与MySQL数据库 连接数据库: 1. 下载JDBC-MySQL数据库驱动 2. 加载JDBC-MySQL数据库驱动 3. 连接数据库 条件与排序查询: ...

  6. classpath和classpath*的区别

    classpath 指的是自己项目里的编译后的class路径 classpath* 包含jar包里面的class路径

  7. centos安装fish shell

    对于 CentOS 7,请以根用户 root 运行下面命令: cd /etc/yum.repos.d/ wget https://download.opensuse.org/repositories/ ...

  8. PL/SQL 加字段 修改数据库之后 之后记得保存脚本

  9. mysql 二进包在linux下安装过程

    cp mysql-5.6.17-linux-glibc2.5-i686 /usr/local/mysql -r groupadd mysql和useradd -r -g mysql mysql 进入安 ...

  10. zynq linux驱动之PL-PS中断【转】

    转自:https://blog.csdn.net/h244259402/article/details/83993524 PC:Windows 10 虚拟机:ubuntu 16.04 vivado:2 ...