开发者社区> 杰克.陈> 正文

C#不登录电脑启动程序

简介: 原文:C#不登录电脑启动程序 我们知道开机自启动程序如果在用户不登录的情况下是不启动的,但是服务类程序是可以跨过用户登录启动的,例如IIS服务,SQL服务。如果我们已经写好了桌面应用程序,又希望他开机自启动,那就需要借助系统服务在未登录的时候打开程序。
+关注继续查看
原文: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:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil AutoStart.exe
停止服务
sc stop AutoStartHik
更改登录
sc config AutoStartHik type= interact type= own
启动服务
sc start AutoStartHik

卸载服务.bat内容为:

段落引sc stop AutoStartHik
C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil AutoStart.exe /u

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

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
用自己的电脑配置服务器
1、安装好tomcat服务器 2、用记事本打开C:\Windows\System32\drivers\etc目录下host文件加一条127.0.0.1(或者本机的IP地址)   www.jkxqj.com(或者自己想要的网站) 3、将自己的项目文件夹放在D:\apache-tomcat-7.0.42\webapps(看自己的tomcat装在哪里)下。 4、将D:\apache-tom
1269 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
20885 0
app启动流程:冷启动,热启动,暖启动
前言:项目中被诟病多媒体开机第一次启动很慢,大约3s的黑屏,后续点开启动正常,其中什么原理呢?这就涉及到系统的三种启动模型 1.Cold Start,冷启动 system---> loding and launching the app displ...
1588 0
[Android]从Launcher开始启动App流程源码分析
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5017056.html 从Launcher开始启动App流程源码分析 com.
656 0
无影云电脑启动大规模商用 已服务众多行业客户
“这是一种在云上共创的端。”5月28日,阿里云总裁张建锋在演讲中透露,无影云电脑已服务众多行业客户,开始启动大规模商用。当天,无影云电脑公有云版上线,客户可以通过阿里云官网下单订购。
694 0
+关注
杰克.陈
一个安静的程序猿~
10425
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载