windows services程序与桌面程序交互问题
kimmking
2009年7月8日20:52:28
今天有人问我的一个问题,分析了下。
有没有好的解决办法。就是因为NT Service不显示UI,我才让它调用exe,可调用的exe也不显示UI 。serviceInstaller 或者 serviceProcessInstaller 中设置吗? 没有找到相关属性。
windows 服务就是注册表里的 SYSTEM\CurrentControlSet\Services\下的一个项。添加 删除 修改 服务其实都仅仅是改注册表。
这个是windows服务的本质
题外话:懂了这个,其实创建一个服务不需要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);