论坛首页 编程语言技术论坛

windows服务与桌面程序交互分析

浏览 9437 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-07-09  

今天有人问我的一个问题,分析了下,借此分析了下windows服务。(不是求 - 助帖,别转到问答了。)

 

 

问题是: 一个服务程序,不显示ui,然后Process调用一个可以显示ui的程序,还是仅仅起了进程,没有出来ui。

“就是因为NT Service不显示UI,我才让它调用exe,可调用的exe也不显示UI 。serviceInstaller 或者 serviceProcessInstaller 中设置吗? 没有找到相关属性。 ”

 

怎么回事呢?

 

 

 

分析如下:


windows 服务就是注册表里的 SYSTEM\CurrentControlSet\Services\下的一个项。添加 删除 修改 服务其实都仅仅是改注册表。
这个是windows服务的本质。服务在windows启动后按级别加载,默认后台运行以local service账户运行,不会出现ui,调用的程序亦然。
题外话:懂了这个,其实创建一个服务不需要ServiceProcessInstaller、ServiceInstaller之类的东西。


设置允许服务与桌面交互 ,这个在服务的登录页有选项。在注册表里是type值 | 256,就是第8位置1。
.net提供了这个属性。

http://msdn.microsoft.com/zh-cn/library/tfdtdw0e(VS.80).aspx
ServiceType.InteractiveProcess
不支持创建交互式服务。作为一种变通方法,可以创建非交互式服务,并创建与该服务进行通信(通过使用套接字或远程处理)的单独控制 GUI 应用程序。

还是不太爽,
要直接交互,改注册表。 

            RegistryKey rk = Registry.LocalMachine; 
            string key = @"SYSTEM\CurrentControlSet\Services\" + serviceName; 
            RegistryKey sub = rk.OpenSubKey(key, true); 
            int value = (int)sub.GetValue("Type"); 
            sub.SetValue("Type", value | 256); 

论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics