Почему моя 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

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