C# 64位Windows服务,但需要32位dll

C# 64位Windows服务,但需要32位dll,c#,dll,windows-services,x86,64-bit,C#,Dll,Windows Services,X86,64 Bit,我需要写一个64位的Windows服务,但是,这是不可能的,因为我使用的是32位的dll,我想写两个服务,一个从32位的dll提取信息,然后将变量传递给64位的Windows服务 但我没有这样做的经验,当我尝试谷歌32位和64位时,它会返回大量的网站,但没有一个可以使用。所以如果可能的话,请帮助我 我之所以编写64位Windows服务,是因为数据太大,计算/过程完成后产生的数据最小为5Gb,但要获得初始数据,我需要使用32位dll 非常感谢 PlayKid您所描述的并不是真正针对32位和64位的

我需要写一个64位的Windows服务,但是,这是不可能的,因为我使用的是32位的dll,我想写两个服务,一个从32位的dll提取信息,然后将变量传递给64位的Windows服务

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

我之所以编写64位Windows服务,是因为数据太大,计算/过程完成后产生的数据最小为5Gb,但要获得初始数据,我需要使用32位dll

非常感谢


PlayKid

您所描述的并不是真正针对32位和64位的

它是关于让两个Windows服务进行通信,您可以通过任何IPC机制进行通信。。。
一个非常快速的方法是使用共享内存(一个全局内存和一个。。。另一种是TCP/IP,它允许将来在不同的机器上运行服务。。。另一种选择是使用定义良好的接口等托管WCF服务。

我认为您可以只针对x86或任何CPU编写一个服务,然后在x64服务器上部署时,您应该将其配置为仅在32位模式下运行。不需要创建或构建其中的两个:

编辑:PlayKid,我不确定我是否理解了你的观点或做出了错误的假设,我认为你只需要一个服务和主机处于x32模式,因为第三方32位dll只有在32位进程中托管时才能工作,所以我想你可以构建一个正常的.NET服务,即使在x64服务器中,也可以以32位模式承载它,它可以工作,无需创建两个服务并使它们相互通信。如果您有更多详细信息,且此答案对您没有帮助,请编辑您的问题;-)

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

为什么它需要64位?在64位版本的Windows下,32位服务将非常愉快地运行。如果您需要专门使用64位功能,或者您正在使用的库已经编译为64位,那么您应该只编译为64位,否则这样做不会带来任何好处


如果您必须编译到x64,那么您将需要使用您提到的一些进程间通信。我假设您已经检查过目标dll是否是x86,并且它不是编译到任何CPU的.Net程序集?您可以考虑在同一台机器上拥有X64 WCF服务,然后从X86 Windows服务接收信息。

最简单的是编写一个32位的服务。为什么您需要64位?@David,在.NET中,针对任何CPU,这不是相同的吗?您是否有特殊的原因将其设置为64位windows服务而不是32位?我认为2个服务之间的通信开销足够大,可以考虑让服务32位。原因是,我正在使用一个巨大的,大约5GB的数组,32位应用程序不能保持大小,但是,为了得到初始数据,我需要使用32位DLL,但是数据集的结果将超过5Gb甚至10Gb的数据,因此,我需要64位。使用64位的原因是因为内存太大,32位将失败,但要获得初始数据,我需要使用32位dll,因此,需要有2个服务,这是我唯一的逻辑思维,如果有其他方法,我很想知道。@PlayKid,好的,你有一个编译到x64的正当理由(这很好)。您可以尝试使用32位dll的自托管x86 WCF服务,x64 Windows服务可以调用WCF服务以获取所需的数据。+1。您确实需要两个进程,其中只有一个注册为服务。另一个进程可以在proc COM对象之外创建或实例化,也可以使用您决定使用的任何进程间通信技术。