64-битная служба Windows, но требуется 32-битная DLL - PullRequest
2 голосов
/ 14 сентября 2011

Мне нужно написать 64-битную службу Windows, однако это невозможно из-за того, что я использую 32-битную DLL, я думаю о написании 2-х сервисов, одна из которых извлекает информацию из 32-битной DLL, а затем передает переменные в 64-битный сервис Windows.

Но у меня нет опыта в этом, и когда я пытался использовать Google 32bit и 64bit, он возвращает множество сайтов, но ни один из них не может быть использован. Поэтому, пожалуйста, помогите мне, если это возможно.

Причина, по которой я пишу 64-битную службу Windows, заключается в том, что размер данных слишком велик, минимум 5 ГБ данных, полученных после завершения расчета / процедуры, но для получения исходных данных мне нужно использовать 32-битную DLL.

Большое спасибо

PlayKid

Ответы [ 3 ]

3 голосов
/ 14 сентября 2011

то, что вы описываете, не относится конкретно к 32 битам по сравнению с 64 ...

Речь идет о взаимодействии двух служб Windows, что можно сделать с помощью любого механизма IPC ... Очень быстрый способ - использовать разделяемую память (глобальную Mutex и MemoryMappedFile) ... другим будет TCP / IP, который позволит работать сервисы на отдельных машинах в будущем ... другой вариант - разместить сервис WCF с четко определенным интерфейсом и т. д.

2 голосов
/ 14 сентября 2011

Мне нужно написать 64-битную Windows Service

Почему он должен быть 64-битным? 32-битная служба будет работать довольно счастливо под 64-битной версией Windows. Вы должны компилировать только до 64-битной версии, если вам нужно специально использовать 64-битные функции, или библиотека, которую вы используете, уже скомпилирована для 64-битной версии, поскольку вы не получите никаких преимуществ, если сделаете это иначе.

Если вы должны скомпилировать в x64, вам нужно использовать межпроцессное взаимодействие, как вы упомянули. Я предполагаю, что вы уже проверили, что целевой DLL является конкретно x86, и это не сборка .Net, которая скомпилирована в AnyCPU? Можно рассмотреть возможность размещения службы WCF x64 на той же машине, которая затем получает информацию от службы Windows x86.

2 голосов
/ 14 сентября 2011

Я думаю, что вы можете написать один сервис, предназначенный только для x86 или anyCpu, тогда при развертывании на сервере x64 вы должны настроить его для работы только в 32-битном режиме.это должно работать без необходимости создавать или строить 2 из них: -)

Редактировать: PlayKid, я не уверен, что я понял или сделал неправильные предположения, я думаю, что вам нужно толькоодин сервис и хост в режиме x32 из-за сторонней 32-битной библиотеки DLL, которая работает, только если она размещена в 32-битном процессе, поэтому я думаю, что вы можете создать нормальный сервис .NET, разместить его в 32-битном режиме даже на сервере x64 иэто сработает, и нет необходимости создавать две службы и заставлять их общаться друг с другом.Отредактируйте свой вопрос, если у вас есть более подробная информация, и этот ответ вам не поможет; -)

...