64位的Windows服务,但需要一个32位的DLL

问题描述:

我需要编写一个64位的Windows服务,但是,这是不可能的,因为我使用的是32位DLL,我正在考虑编写2个服务,一个从32位DLL提取信息,然后将这些变量传递给64位Windows服务。64位的Windows服务,但需要一个32位的DLL

但我没有这样做的经验,当我尝试谷歌32位和64位,它返回大量的网站,但没有一个可以使用。所以请尽可能帮助我。

我写64位Windows Service的原因是数据量太大,计算/过程完成后产生的最小5Gb数据,但为了获得初始数据,我需要使用32位dll。

非常感谢

PlayKid

+1

最简单的是写一个32位的服务。为什么你需要64位? –

+0

@David,在.NET中定位AnyCPU会不会是一样的? –

+1

你是否有特殊的理由让它成为64位的Windows服务而不是32位?我认为2个服务之间的交互开销足够大,考虑到32位服务。 –

你形容是不是真的特定于32与64位...

这是关于有2个窗口服务沟通,你可以通过任何IPC机制做... 一个非常快的将使用共享内存(全球MutexMemoryMappedFile)......另一个将是TCP/IP,这将允许将来可能在单独的机器上运行服务......另一个选项将是托管一个WCF服务一个定义良好的接口等。

我认为你可以编写一个服务,只针对x86或anyCpu,然后在x64服务器上进行部署,你应该将它配置为仅在32位模式下运行。应该不需要创建或建立他们的2 :-)

编辑工作: PlayKid,我不知道我得到了你的观点或作出错误的假设,我想你只需要一个服务和托管在X32模式,因为第三方32位DLL,只有在32位进程托管时才能工作,所以我认为你可以建立一个普通的.NET服务,甚至在x64服务器上以32位模式托管它,它可以工作,不需要提供两种服务并使它们相互通信。编辑你的问题,如果你有更多的细节和这个答案并不能帮助你;-)

+0

+1。您确实需要两个进程,其中只有一个注册为服务。另一个进程可以是CreateProcess或实例化超出COM对象,或者任何你决定使用的进程间通信技术。 –

我需要写一个64位的Windows服务

为什么它必须是64位?在64位版本的Windows下,32位服务将运行得非常愉快。如果您需要专门使用64位功能,或者您正在使用的库已经编译为64位,则应该只编译为64位,否则将无法实现此功能。

如果您必须编译为x64,那么您将需要使用您提到的一些进程间通信。我认为你已经检查过,目标dll是专门x86的,它不是一个编译为AnyCPU的.Net程序集?您可以考虑在同一台机器上托管x64 WCF服务,然后从x86 Windows服务接收信息。

+0

使用64位的原因是因为内存的大小太大,32位会失败,但为了获得初始数据,我需要使用32位DLL,因此,需要2个服务,这是我唯一的逻辑思维如果还有其他方式的话,我很想知道。 – PlayKid

+0

@PlayKid,好的,你有一个合理的编译为x64的原因(这很好)。您可以尝试使用32位dll的自托管x86 WCF服务,并且x64 Windows服务可以调用WCF服务来获取所需的数据。 – slugster