Почему моя 64-битная служба работает как 32-битная?
У меня есть служба Windows, с которой у меня возникла эта проблема.
- В Visual Studio я установил для своей платформы значение 64 бит
- Я запустил CorFlags, чтобы убедиться, что он установлен правильно, я получаю это:
Version : v4.0.30319
CLR Header: 2.5
PE : PE32+
CorFlags : 0x1
ILONLY : 1
32BITREQ : 0
32BITPREF : 0
Signed : 0
Я даже пытался запустить Corflags с 32BITREQ-
а также 32BITPREF-
флаги, чтобы убедиться, что он установлен на то, что он должен быть, но не кости. В taskManager это выглядит как:
MyServiceName (32 бит)
Служба была установлена вместе с Topshelf 3.0 и работает в Windows Server 2012 R2 Standard. Что тут происходит?
2 ответа
У меня была эта проблема, когда предыдущая версия сервиса была 32-битной. Я знал, что установленного в данный момент не было (проверено CORFLAGS), но процесс, связанный со службой, все равно создавался как 32-битный, и я не мог понять почему.
После перезагрузки проблема ушла. Интересно, запоминает ли диспетчер управления службами битность для каждой службы как оптимизацию запуска (или что-то в этом роде).
Возможно, ваш установочный инструмент использует 32-битную installutil
установить процесс? Как я понял из этой статьи
используя 32 бит installutil
приводит к принудительному запуску исполняемого файла как 32-разрядного в 64-разрядной ОС.
Эта часть статьи, в частности, говорит так:
Чтобы обойти эту проблему, запустите installutil.exe вне соответствующего каталога Framework/Framework64. Если у вас есть встроенная оснастка для ILONLY (ILONLY указывает, что исполняемый файл содержит чистый код IL и может выполняться как 32-разрядный или как 64-разрядный процесс), но вы хотите зарегистрировать его в кусте wow64, используйте installutil. exe, который доступен в каталоге%windir%\microsoft.net\framework\v2.nnn Для 64-разрядной регистрации куста запустите installutil.exe из каталога%windir%\microsoft.net\framework64\v2.nnn