让你写的c#程序一开机就自动运行 Windows服务实现开机启动

如果有一个应用程序,想要在电脑开机的时候自动启动(即使用户未登录Windows也要启动),可以用Windows服务来实现,我只是很简单的尝试了一下,由于前段时间做的一个办公QQ,在服务器端需要始终运行一个控制台程序来监听各种消息,但不能每次开机手动去启动这个控制台程序,所以就写了一个Windows服务,我用VS2008写的,以下是简单做法:

先在VS中创建一个Windows服务的项目,在自动生成的service1.cs文件里添加如下语句:

string StartAppPath = @“C:\Program Files\办公QQ服务\QQService.exe”;

这是我要运行的控制台程序的路径,你用的时候换成你的就可以了,然后在OnStart()函数中添加如下代码:

try

        {

            Process proc = new Process();

            proc.StartInfo.FileName = StartAppPath; //注意路径  

            proc.Start();

        }

        catch (System.Exception ex)

        {

            //错误处理  

        }  

双击Service1.cs打开设计视图,在设计视图中右键,选择添加安装程序,然后在生成的ProjectInstaller.Designer.cs文件中的InitializeComponent()函数中添加如下代码,具体作用不甚清楚:

this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;

         this.serviceInstaller1.ServiceName = "办公QQ服务";     //我的服务名称

        this.serviceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic;    \\服务自动运行

好了,现在可以编译生成exe了,下面要用cmd命令将刚才写的这个Windows服务安装并启动:

先cmd运行命令: cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\

   进入.net2.0的文件夹,因为里面有个InstallUtil.exe的应用程序是我们需要用的,上面这个路径是我安装的路径,你根据需要改成自己的就行了,然后继续写下一个cmd命令:

   InstallUtil C:\QQ_WinService.exe

   这个.exe应用程序是我开头提到的用VS2008刚创建的,你也要根据需要换成你的,我直接把这个.exe拷出来放在C盘根目录下了,你到时换成你自己的路径就可以了

   提示服务安装成功后,继续写下一个命令,启动这个服务:

   net start 办公QQ服务

   “办公QQ服务”是我安装的服务的名称,这里也需要换成你自己的

   现在这个Windows服务就已经写好了,当然,这些cmd命令也可以写成一个批处理文件,要停止这个服务的话可以用:

   Net stop 办公QQ服务

   然后删除这个服务:

cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\

InstallUtil /u C:\QQ_WinService.exe

在安装服务过程中遇到一个这样的情况:执行CMD命令“ InstallUtil C:\QQ_WinService.exe”时,提示安装错误:“在初始化安装时发生异常:
System.BadImageFormatException: 未能加载文件或程序集“file:///C:\QQ_WinService.exe”或它的某一个依赖项。该模块应包含一个程序集清单。。”
百度后第一种可能的问题是:“cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\ ”路径不正确,因为我得电脑是64位的,并且.NET框架版本也不是2.0,而是4.6(貌似是)
所以我修改了第一次执行的cmd命令为:“cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319\”(这个地方的路径选择一定不能直接搬,必须要符合自己的实际情况,选对好版本,以及对应好自己的操作系统)
好了,改完路径后再执行“ InstallUtil C:\QQ_WinService.exe”时提示信息变成了:“System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件日志。 不可访问的日志: Security。”
依然是百度、总结:
出现此错误的原因是权限不足导致的;
解决办法:关掉当前的cmd窗口,在cmd快捷方式那“右击”→“以管理员身份运行”cmd,然后再依次输入上述cmd命令,执行成功。至此,服务完美安装完成。
最后,感谢原文章作者那么详细的整理,我在此完善一下遇到问题时的解决办法。另外这仅仅是我遇到的问题,如果之后还有朋友遇到其他问题,烦请在解决后继续完善。
(PS:如对原文章有侵权,请联系删除,谢谢)
原文链接:https://blog.csdn.net/jesselong191/article/details/7445452

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值