Почему я получаю сообщение об ошибке при попытке запустить или запустить службу win? - PullRequest
0 голосов
/ 10 июня 2011

У меня есть служба 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):
Ошибка при попыткезапустить проект: Невозможно запустить программу
'C: \ path \ to \ my \ projects \ bin \ Release \ MyService.exe'.
Системе не удается найти указанный путь.

Службаstart:
Служба "MyService" на локальном cimpouter не может быть запущена.
Ошибка 3: системе не удается найти указанный путь.

Понятия не имею, где может быть ошибка.

РЕДАКТИРОВАТЬ:

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});

        }

1 Ответ

3 голосов
/ 10 июня 2011

Я думаю, что это просто проблема с тем, как служба была зарегистрирована - т.е. она находится не в том месте.

запустите installutil /u [service] из командной строки VS, чтобы удалить все записи службы, которые у вас уже есть.

CD в папку, из которой вы хотите запустить службу, - будьте осторожны , у вас будет как отладочная версия, так и сборка релиза - какую вы хотите установить всписок служб?

Используйте installutil /i [service] на exe для переустановки.

Теперь это должно работать.

Я думаю, что вы, возможно, сначала зарегистрировали отладочную сборку, а затем выполнили операцию Clean в сборке перед сборкой версии Release;таким образом удаляя оригинальный исполняемый файл.Или это - или, возможно, вы переместили проект после его первоначальной разработки?

Многие разработчики, с которыми я работаю, используют другую папку для своих локальных установок служб, которая всегда одинакова;затем они развертывают либо отладочную, либо выпускную версию;таким образом, когда они хотят переключаться между ними, они просто копируют разные версии файлов.Я не делаю этого - я только регистрирую отладочную сборку;но тогда у меня есть больше работы при тестировании сборки выпуска:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...