我需要写一个64位的Windows服务,但是,由于我使用的是32位dll,我不可能,我正在考虑编写2个服务,一个从32位dll中提取信息,然后将变量传递给64位Windows服务。
但我没有这样做的经验,当我尝试使用谷歌32位和64位时,它返回了大量的网站,但没有一个可以使用。所以请尽可能帮助我。
我写64位Windows服务的原因是因为数据量太大,计算/程序完成后产生的最小5Gb数据,但要获得初始数据,我需要使用32位dll。
非常感谢
PlayKid
答案 0 :(得分:3)
你所描述的并不是特定于32比64比特......
关于2个Windows服务通信,您可以通过任何IPC机制进行通信......
一个非常快的将是使用共享内存(全局Mutex
和MemoryMappedFile
)...另一个将是TCP / IP,这将允许将来可能在不同的机器上运行服务...另一种选择是托管具有明确定义的接口等的WCF服务。
答案 1 :(得分:2)
我认为您只能编写一个针对x86或anyCpu的服务,然后在x64服务器上进行部署,您应该将其配置为仅在32位模式下运行。这应该工作,不需要创建或构建其中2个: - )
编辑: PlayKid,我不确定我是否明白了我的观点或做出了错误的假设,我认为你只需要一个服务并在x32模式下托管,因为第三方32位dll只能运行如果托管在32位进程中,那么我认为你可以构建一个普通的.NET服务,即使在x64服务器上也能以32位模式托管它,它可以工作,不需要制作两个服务并让它们相互通信。如果您有更多详细信息并且此答案对您没有帮助,请编辑您的问题; - )
答案 2 :(得分:2)
我需要编写64位Windows服务
为什么需要64位?在64位版本的Windows下,32位服务将非常愉快地运行。如果你需要专门使用64位功能,或者你正在使用的库已经编译为64位,那么你应该只编译到64位,否则你将无法做到这一点。
如果必须编译为x64,那么您将需要使用您提到的一些进程间通信。我假设您已经检查过目标dll是否特别是x86,并且它不是编译为AnyCPU的.Net程序集?您可以考虑在同一台计算机上托管x64 WCF服务,然后从x86 Windows服务接收信息。