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

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

  • 相关阅读:
    13、【Hive】hive在启动beeline客户端时报错:User: xxx is not allowed to impersonate xxx
    12、【Hive】使用JDBC方式访问HIve,启动客户端时报错java.lang.NoClassDefFoundError: org/apache/tez/dag/api/TezConfiguration
    11、【Hive】配置hive元数据访问后,使用hive时报错FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.me
    10、【Hive】hive配置完hive.metastore.uris后报错
    使用Dell iDRAC服务器远程控制安装操作系统简要图解
    使用Windows命令行reg控制注册表键值
    注册表REG文件编写大全
    AD 复制状态检查
    Windows server 2012 利用ntdsutil工具实现AD角色转移及删除域控方法
    利用WSUS部署更新程序
  • 原文地址:https://www.cnblogs.com/CrazyAnts/p/4320474.html
Copyright © 2011-2022 走看看