如何解决vista和win7在windows服务中无法与桌面程序交互的问题?
来源:互联网 发布:java修改tomcat端口号 编辑:程序博客网 时间:2024/04/26 02:05
问题描述
在Windows XP、Windows Server 2003 或早期Windows 系统时代,Windows服务与桌面应用程序的交互非常简单,而vista之后的版本windows加强了权限管理,也就 是所谓的session0隔离,致使在windows服务中调用Process.Start打开桌面程序时,无法看到界面(进程中已经打开了该桌面程序)。
vista/win7系统中的windows服务无法与桌面应用程序交互的原因,请看:
穿透Session 0 隔离(一)
穿透Session 0 隔离(二)
解决方案
使用第三方控件:Cjwdev.WindowsApi.dll,Cjwdev.WindowsApi.xml
下载地址:http://files.cnblogs.com/deepleo/Cjwdev.WindowsApi.dll.zip
示例代码:
using Cjwdev; using Cjwdev.WindowsApi;try { appStartPath= ‚C:\\ruhoo.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); _currentAquariusProcessId = (int)procInfo.dwProcessId; } catch (Exception ex) { MessageBox.Show(string.Format("Start Application failed, its path is {0} ,exception: {1}", appStartPath, ex.Message)); }
0 0
- 如何解决vista和win7在windows服务中无法与桌面程序交互的问题?
- 解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离
- 解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离
- 解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离
- 解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离
- 解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离
- 解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离
- 解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离
- 解决程序在win7/vista系统中无法正常运行的问题
- 解决系统服务运行应用程序的权限问题]使用WTSGetActiveConsoleSessionId()的VISTA服务与桌面交互 (转帖)
- 解决系统服务运行应用程序的权限问题]使用WTSGetActiveConsoleSessionId()的VISTA服务与桌面交互
- 如何解决win7中搜索服务无法启动的问题
- 在windows server 2008,Vista,win7中建立带界面的服务程序
- C#中windows 服务与桌面交互
- 使用WTSGetActiveConsoleSessionId()的VISTA服务与桌面交互
- 使用WTSGetActiveConsoleSessionId()的VISTA服务与桌面交互
- 使用WTSGetActiveConsoleSessionId()的VISTA服务与桌面交互
- 使用WTSGetActiveConsoleSessionId()的VISTA服务与桌面交互
- eclipse快捷键
- LeetCode-15-3Sum
- UML学习
- Spark RDD使用详解5--Action算子
- eclipse开发中项目导入有红色感叹号
- 如何解决vista和win7在windows服务中无法与桌面程序交互的问题?
- java 异步任务与结果
- Errors occurred during the build.
- Java基础知识-----接口(interface)
- 单表数据记录查询
- 在Windows服务中如何使用计时器?
- 寄存器
- Java的死锁现象
- 进制转换