佛山软件定制

.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

 

 

posted on 2010-08-27 10:29  New.min  阅读(2117)  评论(1编辑  收藏  举报

导航