• .Net Remoting之windows服务部署


    1.windows services管理

    我们可以使用services.msc运行服务MMC(Microsoft Management Console),查看当前的windows服务和对服务进行操作!

    也可以使用以下sc命令,sc的用法如下:

    1. 安装服务
    sc create 服务名称 binpath= "服务执行的命令" displayname= "显示名称" depend= Tcpip start= auto

    其中网络连接使用TCP/IP,自动启动

    2. 删除服务
    sc delete 服务名称

    删除后可能需要重启动才行

    3. 修改配置
    sc config 服务名称 binpath= "新命令" displayname= "新显示名称" depend= Tcpip

    4. 设置为自启动
    sc config 服务名称 start= auto

    东方网新,为您提供专业的网站建设,软件开发,网络营销SEO,网络推广服务,代理国外主机空间,域名注册,服务热线:(+86)18608275575,电子邮件:master#atnet.cc;欢迎您访问东方网新网站:www.atnet.cc

    2.部署服务

    将Remoting部署为windows服务,需要创建一个windows服务项目,并为该服务添加一个安装程序

    设置好ServiceName,Account,StartType等属性

    windows service继承自ServiceBase类,我们可以通过重写ServiceBase的OnStart方法并在该方法中添加自己的代码

        public partial class RemoteSample : ServiceBase
        {
            public RemoteSample()
            {
                InitializeComponent();
            }
            protected override void OnStart(string[] args)
            {
                //our code in here
            }
        }
    
    东方网新,为您提供专业的网站建设,软件开发,网络营销SEO,网络推广服务,代理国外主机空间,域名注册,服务热线:(+86)18608275575,电子邮件:master#atnet.cc;欢迎您访问东方网新网站:www.atnet.cc

    创建一个windows服务,在这里我们通过读取配置文件来创建Remoting

    //FILE:app.config
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    	<system.runtime.remoting>
    		<application name="HuiShi.FoodOrdering.Service">
    			<service>
    				<wellknown type="HuiShi.FoodOrdering.DAL.FoodHelper,HuiShi.FoodOrdering.DAL" objectUri="food.service" mode="Singleton"/>
    			</service>
    			<channels>
    				<channel ref="tcp" port="10015"/>
    			</channels>
    		</application>
    	</system.runtime.remoting>
    </configuration>
    //Service1.cs
    public partial class Service : ServiceBase
        {
            public Service()
            {
                InitializeComponent();
            }
    
            protected override void OnStart(string[] args)
            {
                RemotingConfiguration.Configure(AppDomain.CurrentDomain.BaseDirectory + "HuiShi.FoodOrdering.Service.exe.config", true);
            }
    
            protected override void OnStop()
            {
            }
        }
    
    东方网新,为您提供专业的网站建设,软件开发,网络营销SEO,网络推广服务,代理国外主机空间,域名注册,服务热线:(+86)18608275575,电子邮件:master#atnet.cc;欢迎您访问东方网新网站:www.atnet.cc

    注:RemotingConfiguration.Configure(filepath,bool security); filepath需加上AppDomain.CurrentDomain.BaseDirectory,否则安装程序将找不到配置文件

    3.安装服务:

    用vs命令行工具运行 installutil filepath,installutil工具位于.net framework版本安装目录下

    4.启动服务:sc start service_name

    5.安装完成后自动启动服务功能:

    注册Installer的AfterInstall事件,在AfterInstall中创建CMD进程,使用sc start server_name启动服务

    东方网新,为您提供专业的网站建设,软件开发,网络营销SEO,网络推广服务,代理国外主机空间,域名注册,服务热线:(+86)18608275575,电子邮件:master#atnet.cc;欢迎您访问东方网新网站:www.atnet.cc

    示例代码如下:

    using System;
    using System.ComponentModel;
    using System.Configuration.Install;
    using System.Diagnostics;
    
    namespace RemoteSample.WindowsService
    {
        [RunInstaller(true)]
        public partial class ProjectInstaller : Installer
        {
            public ProjectInstaller()
            {
                InitializeComponent();
                this.AfterInstall += ProjectInstaller_AfterInstall;
            }
    
            void ProjectInstaller_AfterInstall(object sender, InstallEventArgs e)
            {
                Process p = new Process();
                p.StartInfo.FileName = "cmd.exe";
                p.StartInfo.CreateNoWindow = true;                                                             //在不显示窗口的情况下运行进程
                p.StartInfo.UseShellExecute = false;                                                           //是否启动系统外壳
                p.StartInfo.RedirectStandardInput = true;                                                      //是否从StandardInput中读取输入
                p.StartInfo.RedirectStandardOutput = true;                                                     //是否从StandardInput中读取输出
                p.Start();
                p.StandardInput.WriteLine("sc start "+new RemoteSample().ServiceName);
                p.StandardInput.WriteLine("exit");                                                              //退出控制台
                p.Dispose();
            }
        }
    }
    

    东方网新,为您提供专业的网站建设,软件开发,网络营销SEO,网络推广服务,代理国外主机空间,域名注册,服务热线:(+86)18608275575,电子邮件:master#atnet.cc;欢迎您访问东方网新网站:www.atnet.cc
    6.创建一个安装windows服务并启动的应用

       我们需要获取windows服务安装文件的地址(servicePath),并且我们必须知道windows服务的名称(serviceName)

       添加以下代码实现选取windows服务安装文件安装并启动

                Process p = new Process();
                p.StartInfo.FileName = "cmd.exe";
                p.StartInfo.CreateNoWindow = true;                                                             //在不显示窗口的情况下运行进程
                p.StartInfo.UseShellExecute = false;                                                           //是否启动系统外壳
                p.StartInfo.RedirectStandardInput = true;                                                      //是否从StandardInput中读取输入
                p.StartInfo.RedirectStandardOutput = true;                                      
                p.Start();
                p.StandardInput.WriteLine(@"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe " +
                    servicePath);
                p.StandardInput.WriteLine("sc start "+serviceName);
                p.StandardInput.WriteLine("exit");      
    


    7.使用批处理安装和卸载服务

    安装install.bat

    echo 开始安装游戏服务
    ::使用参数%1
    sc create CnChessgds binpath= "%1/CnChess/Jianghuyou.GameService.exe" start= auto obj= LocalSystem DisplayName= "中国象棋游戏服务"
    ::不使用参数
    sc create CnChessgds binpath= "C:/Program files/ops/game/CnChess/Jianghuyou.GameService.exe" start= auto obj= LocalSystem DisplayName= "中国象棋游戏服务"
    echo 安装完成!任意键盘退出
    pause
    

    卸载uninstall.bat

    echo 开始删除游戏服务
    sc stop CnChessgds
    sc delete CnChessgds
    echo 已经卸载!任意键盘退出
    pause
    
  • 相关阅读:
    synchronize模块
    ansible 的user模块
    copy src remote_src false表示本地,true在远程
    import_tasks: tasks/sometasks.yml
    ansible 变量传递到include
    ansible unarchive模块
    防火墙在setup进入不了
    telegram汉化和代理
    Ubuntu 18.04 一键安装深度截图工具 Deepin Screenshot
    8086汇编语言程序设计——子程序与模块化
  • 原文地址:https://www.cnblogs.com/newmin/p/dotnet_remoting_windows_service_install.html
Copyright © 2020-2023  润新知