Исключение пробной загрузки при установке службы Windows в.NET

У меня есть служба Windows, написанная на.NET, и я использовал функцию зондирования для загрузки DLL в эту службу Windows. Однако, когда я открываю командную строку и пытаюсь установить службу Windows с помощью installutil.exe, я получаю сообщение об ошибке, такое как: "System.Reflection.ReflectionTypeLoadException: невозможно загрузить один или несколько запрошенных типов. Получите свойство LoaderExceptions для получения дополнительной информации. Отмена установки для ",

С другой стороны, когда я перемещаю DLL в ту же папку со службой Windows и повторяю процедуру установки, служба Windows устанавливается успешно.

Есть ли у вас какие-либо идеи или предложения по этой проблеме? Есть ли проблема при установке службы Windows.NET?

2 ответа

Я сталкиваюсь с той же проблемой в моем проекте, в моем проекте службы Windows у меня есть следующее app.config раздел:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="SDK" />
    </assemblyBinding>
</runtime>

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

cmd: hotspotcenter -i <service_name="service name">
// service_name i made it optional

установщик класса помощника:

internal static class BasicServiceInstaller
{
    public static void Install(string serviceName)
    {
        CreateInstaller(serviceName).Install(new Hashtable());
    }

    public static void Uninstall(string serviceName)
    {
        CreateInstaller(serviceName).Uninstall(null);
    }

    private static Installer CreateInstaller(string serviceName)
    {
        var installer = new TransactedInstaller();
        installer.Installers.Add(new ServiceInstaller
        {
            ServiceName = serviceName,
            DisplayName = serviceName,
            StartType = ServiceStartMode.Manual
        });
        installer.Installers.Add(new ServiceProcessInstaller
        {
            Account = ServiceAccount.LocalSystem
        });
        var installContext = new InstallContext(
            serviceName + ".install.log", null);
        installContext.Parameters["assemblypath"] =
            Assembly.GetEntryAssembly().Location;
        installer.Context = installContext;
        return installer;
    }
}

в основной записи сервисного проекта:

 if (Environment.UserInteractive)
 {
            bool install = false;
            bool uninstall = false;
            string serviceName = "YourDefaultServiceName";

            var p = new OptionSet()
              .Add<bool>("i|install", "Install Windows Service", i => install = i)
              .Add<bool>("i|install=", "Install Windows Service", i => install = i)
              .Add<bool>("u|uninstall", "Uninstall Window Service", u => uninstall = u)
              .Add<string>("sn|service_name=", "Service Name", n => serviceName = n);

            p.Parse(args);

            if (install)
            {
                BasicServiceInstaller.Install(serviceName);
                return;
            }
            else if (uninstall)
            {
                BasicServiceInstaller.Uninstall(serviceName);
                return;
            }

            // if no install or uninstall commands so start the service as a console.
            var host = new YourService();
            host.Start(args);
            Console.ReadKey();
        }
        else
        {
            ServiceBase.Run(new HotspotCenterService());
   }

Без точной информации я бы предложил следующее:

  • проверьте детали исключения, чтобы увидеть, что именно пошло не так
  • используйте Fusion Log Viewer, чтобы увидеть, какие сборки не удалось связать
  • проверьте, соответствует ли ваша конфигурация исследования вашему развертыванию

Зондирование настроено, как описано здесь.

Другие вопросы по тегам