码迷,mamicode.com
首页 > Windows程序 > 详细

在windowService用Process.Start()启动程序没有界面-记录

时间:2015-03-07 17:10:04      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:

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()启动程序没有界面-记录

标签:

原文地址:http://www.cnblogs.com/CrazyAnts/p/4320474.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!