• C#不登录电脑启动程序


    我们知道开机自启动程序如果在用户不登录的情况下是不启动的,但是服务类程序是可以跨过用户登录启动的,例如IIS服务,SQL服务。如果我们已经写好了桌面应用程序,又希望他开机自启动,那就需要借助系统服务在未登录的时候打开程序。

    创建系统服务

    在VS中创建Windows服务:
    image_1b6vq6jau2vplps1poi15197pg9.png-91.5kB
    在Service的OnStart方法中,启动程序,代码如下:

        protected override void OnStart(string[] args)
        {
            if (!IsExistProcess("程序名"))
            {
                //程序路径
                string exePath = "";
                Process.Start(exePath);
            }
            string path = AppDomain.CurrentDomain.BaseDirectory;
            FileInfo fi = new FileInfo(path + "\info.txt");
            using (FileStream stream = fi.OpenWrite())
            {
                StreamWriter streamWriter = new StreamWriter(stream);
                streamWriter.Write("服务启动日期:" + DateTime.Now.ToString());
                streamWriter.Flush();
                streamWriter.Close();
            }
        }
    
        protected override void OnStop()
        {
            string path = AppDomain.CurrentDomain.BaseDirectory;
            FileInfo fi = new FileInfo(path + "\info.txt");
            using (FileStream stream = fi.OpenWrite())
            {
                StreamWriter streamWriter = new StreamWriter(stream);
                streamWriter.Write("服务关闭日期:" + DateTime.Now.ToString());
                streamWriter.Flush();
                streamWriter.Close();
            }
        }
    
        /// <summary>
        /// 判断进程是否开启
        /// </summary>
        /// <param name="processName"></param>
        /// <returns></returns>
        private bool IsExistProcess(string processName)
        {
            Process[] MyProcesses = Process.GetProcesses();
            foreach (Process MyProcess in MyProcesses)
            {
                if (MyProcess.ProcessName.CompareTo(processName) == 0)
                { return true; }
            }
            return false;
        }
    

    在Service的设计视图添加安装程序:
    image_1b6vrcvvk1c1etfl91c1cqrgrq9.png-24.4kB
    image_1b6vrq1um16nv1jo51gpnqo3ibd9.png-5.1kB

    设置ProcessInstaller的Account为LocalSystem
    设置serviceInstaller的StartType为Automatic,ServiceName和Description为进程中显示的名字和描述

    开启服务,启动程序

    程序编译好,取出BIN文件夹,添加开启服务和关闭服务的批处理文件,如下图:
    image_1b6vs61i9v2l1qn6erm4akujkm.png-47.3kB

    开启桌面程序的关键点,更改进程登录模式

    image_1b6vsbv5n1eu268kshv17j54q213.png-108.3kB

    安装后启动.bat内容为:

    安装服务
    C:WindowsMicrosoft.NETFrameworkv4.0.30319installutil AutoStart.exe
    停止服务
    sc stop AutoStartHik
    更改登录
    sc config AutoStartHik type= interact type= own
    启动服务
    sc start AutoStartHik

    卸载服务.bat内容为:

    段落引sc stop AutoStartHik
    C:WindowsMicrosoft.NETFrameworkv4.0.30319installutil AutoStart.exe /u

    至此执行启动服务的bat文件后完成,开机自启动桌面程序。

    注:有朋友在问题中提到了运行的问题,我在这里截张图
    运行后的程序如果有和桌面交互的语句,会有以下提示,如你MessgeBox语句
    image_1b7033hr51ual1arq15bh14h8b5r9.png-57.4kB
    点进去之后会有一个全新的桌面,上面运行着你通过服务启动的程序,如果和桌面不交互,你在进程里可以看到exe正在运行,他的显示界面在交互式服务里自己安静的运行。

  • 相关阅读:
    ElasticSearch入门到筋痛
    JavaScript学习(四)
    JavaScript学习(三)
    JavaScript学习(二)
    JavaWeb学习(一)
    final
    static
    object的方法
    java 数据类型
    spring mvc
  • 原文地址:https://www.cnblogs.com/kaoleba/p/6337040.html
Copyright © 2020-2023  润新知