2011-09-14 87 views
2

我需要編寫一個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位服務。 –

回答

3

你形容是不是真的特定於32與64位...

這是關於有2個窗口服務溝通,你可以通過任何IPC機制做... 一個非常快的將使用共享內存(全球MutexMemoryMappedFile)......另一個將是TCP/IP,這將允許將來可能在單獨的機器上運行服務......另一個選項將是託管一個WCF服務一個定義良好的接口等。

2

我認爲你可以編寫一個服務,只針對x86或anyCpu,然後在x64服務器上進行部署,你應該將它配置爲僅在32位模式下運行。應該不需要創建或建立他們的2 :-)

編輯工作: PlayKid,我不知道我得到了你的觀點或作出錯誤的假設,我想你只需要一個服務和託管在X32模式,因爲第三方32位DLL,只有在32位進程託管時才能工作,所以我認爲你可以建立一個普通的.NET服務,甚至在x64服務器上以32位模式託管它,它可以工作,不需要提供兩種服務並使它們相互通信。編輯你的問題,如果你有更多的細節和這個答案並不能幫助你;-)

+0

+1。您確實需要兩個進程,其中只有一個註冊爲服務。另一個進程可以是CreateProcess或實例化超出COM對象,或者任何你決定使用的進程間通信技術。 –

2

我需要寫一個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