在windowService用Process.Start()启动程序没有界面-记录
生活随笔
收集整理的这篇文章主要介绍了
在windowService用Process.Start()启动程序没有界面-记录
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
原文:在windowService用Process.Start()启动程序没有界面-记录 1.在服务程序安装时编程实现,ProjectInstaller.cs using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Configuration.Install; //using System.Linq; using Microsoft.Win32; //对注册表操作一定要引用这个命名空间 namespace MonitorService { [RunInstaller(true)] public partial class ProjectInstaller : Installer { public ProjectInstaller() { InitializeComponent(); //this.Context.Parameters["ServerCode"].ToString(); // 读取安装时输入的服务器编号 } private void ProjectInstaller_AfterInstall(object sender, InstallEventArgs e) { //设置允许服务与桌面交互 SetServiceTable("MonitorService"); } /// <summary> /// 设置允许服务与桌面交互 ,修改了注册表,要重启系统才能生效 /// </summary> /// <param name="ServiceName">服务程序名称</param> private void SetServiceTable(string ServiceName) { 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); } } } 2.注册表修改 onstart的时候修改注册表 [HKEY_LOCAL_MACHINE"SYSTEM"CurrentControlSet"Services"你的服务名] "Type"=dword:00000010 key value+256 比如现在00000010是16+256=272 16精制就是00000110 3.SC程序修改, 允许与桌面进行交互 在dos命令提示符下输入: sc config MonitorService type= interact type= own 回车即可。 可以用批处理的方式实现,把下面代码保存为 myservice.bat 即可: rem 配置服务程序为允许与桌面进行交互方式 @echo "准备停止服务程序..." sc stop MyService @echo "设置允许与桌面进行交互方式允许" sc config MyService type= interact type= own @echo "正在重新启动服务..." sc start MyService @echo "启动服务成功!" 取消“允许与桌面进行交互” DOS命令提示符下运行下面语句即可: sc config MyService type= own 经测试:1,2 可以选中“允许与桌面进行交互”,但启动服务的时候,不能弹出应用程序的界面。 3 可以完美实现所有要求。
在服务的属性的登录选项卡中,把允许服务与桌面交互勾选上,再试试。
总结
以上是生活随笔为你收集整理的在windowService用Process.Start()启动程序没有界面-记录的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: SSM集成
- 下一篇: ****** 三十五 ******、软设