• 在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 可以完美实现所有要求。

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

  • 相关阅读:
    HDU6655 Just Repeat(2019杭电多校J题)
    贪吃蛇-
    2D命令行小游戏Beta1.0
    寒假作业三
    星 辰 &#183; 第 一 条 约 定
    塔 &#183; 第 三 条 约 定
    class中的东西和继承、多态的概念
    塔 &#183; 第 一 条 约 定
    部门学习总结之类的
    作业二
  • 原文地址:https://www.cnblogs.com/CrazyAnts/p/4320474.html
Copyright © 2020-2023  润新知