zoukankan      html  css  js  c++  java
  • 在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 = @"SYSTEMCurrentControlSetServices" + 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 可以完美实现所有要求。

    在服务的属性的登录选项卡中,把允许服务与桌面交互勾选上,再试试。

  • 相关阅读:
    GET POST区别
    http1.0 1.1 2.0区别
    分布式系统理论之Quorum机制
    MySQL解析过程、执行过程
    redis常见问题和解决方案
    Windows下安装Linux虚拟机的用途和好处
    ping,telnet,ssh命令的理解
    强化学习入门 第五讲 值函数逼近
    强化学习入门第四讲 时间差分方法
    强化学习基础 第三讲 蒙特卡罗方法
  • 原文地址:https://www.cnblogs.com/CrazyAnts/p/4320474.html
Copyright © 2011-2022 走看看