Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么在尝试运行或启动win服务时出错?_C#_Windows Services - Fatal编程技术网

C# 为什么在尝试运行或启动win服务时出错?

C# 为什么在尝试运行或启动win服务时出错?,c#,windows-services,C#,Windows Services,我有一个windows服务,无法运行或启动,只能安装或直接调试项目 这是我的主要观点: namespace MyService { public static class Program { private static void Main() { var ServicesToRun = new System.ServiceProcess.ServiceBase[] { new Service() };

我有一个windows服务,无法运行或启动,只能安装或直接调试项目

这是我的主要观点:

namespace MyService
{
    public static class Program
    {
        private static void Main()
        {
            var ServicesToRun = new System.ServiceProcess.ServiceBase[] { new Service() };
            System.ServiceProcess.ServiceBase.Run(ServicesToRun);
        }
    }
}
这是我的服务:

public partial class Service : ServiceBase
    {
        private dynamic _serviceHost;

        public Service()
        {
            this.InitializeComponent();
            this.ServiceName = "MyService";
            this.CanShutdown = true;
            this.CanStop = true;
        }

        private static string HostName
        {
            get
            {
                string hostName = Dns.GetHostName();
                IPHostEntry ipHostEntry = Dns.GetHostEntry(hostName);
                return ipHostEntry.HostName;
            }
        }

        protected override void OnStart(string[] args)
        {
            var worker = new Thread(this.InitializeHost) { Name = "Host", IsBackground = false };
            worker.Start();
        }

        private void InitializeHost()
        {
            var baseAddress = new Uri(string.Format("net.tcp://{0}:{1}/MyService", HostName, "9020"));
            var mexAddress = new Uri(string.Format("http://{0}:{1}/MyService", HostName, "8000"));
            var cache = Factory.Create<string>("MyAssembly.MyClass", "MyAssembly");
            var service = new ServiceWcf<string>(cache);
            using (this._serviceHost = new Host<string>(service))
            {
                this._serviceHost.Open(baseAddress, mexAddress);
            }
        }

        protected override void OnStop()
        {
            this._serviceHost.Dispose();
        }
    }

我认为这只是服务注册方式的一个问题——即,它位于错误的位置

从VS命令提示符运行
installutil/u[service]
,卸载您已有的任何服务条目

CD转到要从中运行服务的文件夹-注意这里,您将同时拥有调试版本和发布版本-您希望在服务列表中安装哪一个

在exe上使用
installutil/i[service]
重新安装

现在应该可以了

我认为您可能已经首先注册了调试构建,然后在构建发布版本之前在构建上运行了一个干净的操作;从而删除原始可执行文件。或者,或者,您在最初开发项目之后移动了该项目


与我一起工作的许多开发人员使用不同的文件夹来安装本地服务,这些文件夹始终是相同的;然后,他们向其部署调试或发布版本;因此,当他们想要在两者之间切换时,他们只是复制不同的文件版本。我不这样做-我只注册调试版本;但是,在测试发布版本时,我还有更多的工作要做:)

我认为这只是服务注册方式的问题,也就是说,它位于错误的位置

从VS命令提示符运行
installutil/u[service]
,卸载您已有的任何服务条目

CD转到要从中运行服务的文件夹-注意这里,您将同时拥有调试版本和发布版本-您希望在服务列表中安装哪一个

在exe上使用
installutil/i[service]
重新安装

现在应该可以了

我认为您可能已经首先注册了调试构建,然后在构建发布版本之前在构建上运行了一个干净的操作;从而删除原始可执行文件。或者,或者,您在最初开发项目之后移动了该项目


与我一起工作的许多开发人员使用不同的文件夹来安装本地服务,这些文件夹始终是相同的;然后,他们向其部署调试或发布版本;因此,当他们想要在两者之间切换时,他们只是复制不同的文件版本。我不这样做-我只注册调试版本;但是在测试发布版本时,我还有更多的工作要做:)

也许服务注册有问题?你能告诉我们你是如何做到的吗?在“调试”文件夹中的“发布”文件夹中是否缺少一个文件?不,两个输出都是相同的。服务注册有问题吗?你能告诉我们你是如何做到的吗?在“调试”文件夹中的“发布”文件夹中是否缺少一个文件?不,两个输出都是相同的。我已经在服务的两个版本(调试/发布)上运行了installutil/u,并清理了输出版本和重新生成版本。它仍然抛出此错误。@mrt181-请从服务MMC管理单元验证路径是否正确。或者下载psservice()并使用psservice config[service\u name]查询它。对我来说,错误消息是,可执行文件不在它认为的位置。可执行文件的路径是正确的。当我试图手动运行可执行文件时,也会出现错误。@mrt181:好的,如果不是这样的话;那么这一定与服务主机有关。取出打开服务主机的代码(可能只是不打开线程),重新构建并重新部署,然后查看是否发生了相同的情况。如果是,那么它必须仍然是安装路径或类似的路径,因为服务现在没有做任何事情:)我已经在OnStart()中注释了这两行,该方法现在什么也不做。当我尝试运行或启动ExecutableOK时,仍然会出现此错误。我已经在服务的两个版本(调试/发布)上运行了installutil/u,清理了输出版本和重新生成版本。它仍然抛出此错误。@mrt181-请从服务MMC管理单元验证路径是否正确。或者下载psservice()并使用psservice config[service\u name]查询它。对我来说,错误消息是,可执行文件不在它认为的位置。可执行文件的路径是正确的。当我试图手动运行可执行文件时,也会出现错误。@mrt181:好的,如果不是这样的话;那么这一定与服务主机有关。取出打开服务主机的代码(可能只是不打开线程),重新构建并重新部署,然后查看是否发生了相同的情况。如果是,那么它必须仍然是安装路径或类似的路径,因为服务现在没有做任何事情:)我已经在OnStart()中注释了这两行,该方法现在什么也不做。当我尝试运行或启动可执行文件时,仍然会出现此错误
private void InitializeComponent()
        {
            this.serviceProcessInstaller = new System.ServiceProcess.ServiceProcessInstaller();
            this.serviceInstaller = new System.ServiceProcess.ServiceInstaller();
            // 
            // serviceProcessInstaller
            // 
            this.serviceProcessInstaller.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
            this.serviceProcessInstaller.Password = null;
            this.serviceProcessInstaller.Username = null;
            // 
            // serviceInstaller
            // 
            this.serviceInstaller.ServiceName = "MyService";
            this.serviceInstaller.DisplayName = "My service";
            this.serviceInstaller.Description = "My service is awesome.";
            this.serviceInstaller.StartType = System.ServiceProcess.ServiceStartMode.Automatic;
            // 
            // ProjectInstaller
            // 
            this.Installers.AddRange(new System.Configuration.Install.Installer[] {
            this.serviceProcessInstaller,
            this.serviceInstaller});

        }