问题描述
有没有什么方法,创建此windows服务之后,不用手动启动,一运行此windows服务,它就自启动了?现在这个windows方法,运行完毕之后,需要手动去启动,但是关机开机之后他能自启动,我想要的是,运行完毕之后能达到像开机关机之后自启动这个情况,希望各位大神指点
解决方案
本帖最后由 a981583536 于 2016-07-11 13:05:10 编辑
解决方案二:
自己去看下Program.cs的Main函数吧默认如果是服务的话通过ServiceBase.Run来运行你可以自己加个参数,直接执行相应的方法
解决方案三:
你可以把一个windowsservice工程(修改应用程序属性)重新设置为“控制台应用”,然后以你说得控制台方式执行。控制台方式的main可以这样写(例如)staticvoidMain(string[]args){if(args.Length==0){#if!DEBUGServiceBase.Run(newService());#elseShowHelp();#endifreturn;}if(args.Contains("-i")){Uninstall(true);端口.ForEach(p=>打开防火墙(p));Install();return;}if(args.Contains("-u")){Uninstall();return;}if(args.Contains("-t")){Uninstall(true);Execute(true);Console.WriteLine("系统进入Pending状态。请按Ctrl+Break退出.....");vareh=newManualResetEvent(false);Console.CancelKeyPress+=(s,e)=>{eh.Set();};eh.WaitOne();return;}ShowHelp();}privatestaticvoidShowHelp(){Console.WriteLine("命令参数格式:");Console.WriteLine("t-i:安装windows服务。");Console.WriteLine("t-u:卸载windows服务。");Console.WriteLine("t-t:以控制台方式执行服务。");}
privatestaticvoid打开防火墙(intport){varinf=newProcessStartInfo{UseShellExecute=true,FileName="netsh",Arguments="firewallsetportopeningTCP"+port,WindowStyle=ProcessWindowStyle.Hidden};varp=Process.Start(inf);p.WaitForExit();}privatestaticvoidUninstall(bool独立窗口=false){Console.WriteLine("停止"+SvrName);varinfo=newProcessStartInfo("sc","stop"+SvrName){WindowStyle=ProcessWindowStyle.Hidden,UseShellExecute=独立窗口};varpro=Process.Start(info);pro.WaitForExit();Console.WriteLine("卸载"+SvrName);info.Arguments="delete"+SvrName;pro=Process.Start(info);pro.WaitForExit();}privatestaticvoidInstall(){#ifDEBUGConsole.WriteLine("以DEBUG模式编译的程序不应安装为windows服务。请重新编译程序。");#elseConsole.WriteLine("创建"+SvrName);//注意这些选项以等号结束,然后要有一个空格,后边才能跟选项值。一定不能缺少空格。varinfo=newProcessStartInfo("sc",string.Format("create{0}binpath="{1}"displayname="{2}"start=autotype=own",SvrName,Process.GetCurrentProcess().MainModule.FileName,SvrDisplay)){WindowStyle=ProcessWindowStyle.Minimized,UseShellExecute=false};varpro=Process.Start(info);pro.WaitForExit();Console.WriteLine("启动"+SvrName);info.Arguments="start"+SvrName;pro=Process.Start(info);pro.WaitForExit();#endif}
解决方案四:
Execute();实际上就是你的执行业务处理的主程序。你的服务中可能就是这样调用它的partialclassService:ServiceBase{publicService(){InitializeComponent();}protectedoverridevoidOnStart(string[]args){ThreadPool.QueueUserWorkItem(h=>Program.Execute(false));//自定义参数表示是否是控制台调用}}
所以,一个控制台程序,它可以用“命令行参数”来控制服务的安装、卸载。并且也可以以控制台方式测试执行。
解决方案五:
调用执行一个*.bat文件好了,bat文件restart你的电脑
解决方案六:
你的所谓“用cmd命令行创建此服务”于这里的abc.exe-i命令的区别,你自己一看便知。这里,abc.exe把自己安装为服务器,然后立刻启动了服务器!
解决方案七:
引用4楼shoppo0505的回复:
调用执行一个*.bat文件好了,bat文件restart你的电脑
呵呵,随时卸载和安装服务,是不用启动电脑的哇。
解决方案八:
sccreate[Name]binpath="[path]"start=auto
每个=后面有一个空格
解决方案九:
引用7楼crystal_lz的回复:
sccreate[Name]binpath="[path]"start=auto每个=后面有一个空格
这个我加了