windows服务与前台交互

1.问题描述

最近遇上一个难题,我写了一个windows服务,想要与桌面可以进行交互,设置了属性在运行一点反应也没有。

2.解决方案

   查找出来的解决方案有以下这些(一个代码块一个):

 

 1 [RunInstaller(true)]
 2     public partial class ProjectInstaller : System.Configuration.Install.Installer
 3     {
 4         public ProjectInstaller()
 5         {
 6             InitializeComponent();
 7         }
 8 
 9         protected override void OnAfterInstall(IDictionary savedState)
10         {
11             try
12             {
13                 base.OnAfterInstall(savedState);
14                 System.Management.ManagementObject myService = new System.Management.ManagementObject(
15                     string.Format("Win32_Service.Name='{0}'", this.serviceInstaller1.ServiceName));
16                 System.Management.ManagementBaseObject changeMethod = myService.GetMethodParameters("Change");
17                 changeMethod["DesktopInteract"] = true;
18                 System.Management.ManagementBaseObject OutParam = myService.InvokeMethod("Change", changeMethod, null);
19             }
20             catch (Exception)
21             {
22             }
23         }
24     }
View Code
 1 protected override void OnCommitted(System.Collections.IDictionary savedState)
 2         {
 3             base.OnCommitted(savedState);
 4 
 5             using (RegistryKey ckey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Services\" + Constants.ServiceName, true))
 6             {
 7                 if (ckey != null)
 8                 {
 9                     if (ckey.GetValue("Type") != null)
10                     {
11                         ckey.SetValue("Type", (((int)ckey.GetValue("Type")) | 256));
12                     }
13                 }
14             }
15         }
View Code
1 @echo "准备停止服务程序..."
2 sc stop TestService 
3 @echo "设置允许与桌面进行交互方式允许"
4 sc config TestService type= interact type= own
5 @echo "正在重新启动服务..."
6 sc start TestService 
7 @echo "启动服务成功!"
View Code

经验证,那个都无法实现服务与前台交互,桑心T0T........

3.最终版

   问题解决方案:由于windwos系统的升级,对权限划分更加明确,我们需要进行Sessoin 0穿透隔离,但是什么是Session 0呢?

   http://www.cnblogs.com/gnielee/archive/2010/04/07/session0-isolation-part1.html(大神详解,就不班门弄斧了)

ps:部分代码及结果展示

 1  //个人理解Session0是开启系统就出现的系统级别的“用户”,即使没有任何用户登录,这个“用户”也是自动“登录”的,这个应该叫“老板”即 Session 0,其他的才叫桌面用户:管理员、A用户、B用户、其他的远程用户等等,都是非Session0级别的。
 2     class Interop
 3     {
 4         #region  简单
 5         public static IntPtr WTS_CURRENT_SERVER_HANDLE = IntPtr.Zero;
 6 
 7         public static void ShowMessageBox(string message, string title)
 8         {
 9             try
10             {
11                 int resp = 0;
12                 File.AppendAllText(@"C:\log.txt", WTSGetActiveConsoleSessionId().ToString());
13                 WTSSendMessage(
14                     WTS_CURRENT_SERVER_HANDLE,
15                     WTSGetActiveConsoleSessionId()+1,
16                     title, title.Length,
17                     message, message.Length,
18                     0, 0, out resp, false);
19             }
20             catch (Exception ex) {
21                 File.AppendAllText(@"C:\log.txt", ex.Message);
22             }
23         }
24 
25         [DllImport("kernel32.dll", SetLastError = true)]
26         public static extern int WTSGetActiveConsoleSessionId();
27 
28         [DllImport("wtsapi32.dll", SetLastError = true)]
29         public static extern bool WTSSendMessage(
30             IntPtr hServer,
31             int SessionId,
32             String pTitle,
33             int TitleLength,
34             String pMessage,
35             int MessageLength,
36             int Style,
37             int Timeout,
38             out int pResponse,
39             bool bWait);
40         #endregion
41 }
View Code

 

转载于:https://www.cnblogs.com/ypyhy/p/6425261.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值