2014-02-09 92 views
2

我想在Azure雲服務部署的網站中運行一些本機C++代碼,並且面臨一些BadImageFormatException。IIS是否爲Azure雲服務運行x64或x86?

我已經設法加載和運行在WebRole本身的dll,但是當擊中網站時,YSOD拋出異常,它無法加載我的DLL。

本機代碼是針對x64構建的,我猜測這是問題所在。我需要本機代碼爲x64。這是不支持的IIS或我可以做一些相關的雲服務告訴IIS使用64位?

我試着使用DependencyWalker來查看我是否可以找出哪個依賴項丟失,並用一個問號標記下面的內容。如果這對任何人都意味着什麼。

API-MS-WIN-CORE-PRIVATEPROFILE-L1-1-1.DLL 
API-MS-WIN-CORE-KERNEL32-PRIVATE-L1-1-1.DLL 
API-MS-WIN-SERVICE-PRIVATE-L1-1-1.DLL 

回答

1

這聽起來像一個64位的唯一環境,

http://msdn.microsoft.com/en-us/library/windowsazure/hh694038.aspx

http://blogs.msdn.com/b/haniatassi/archive/2009/03/20/using-a-32bit-dll-in-the-windows-azure.aspx

所以,當你遇到BadImageFormatException它需要在其圖書館的位數進一步研究是錯誤的。

DependencyWalker中顯示的奇怪項目是Microsoft在Windows源代碼編譯期間使用的私有事物,通常您可以放心地忽略它們。

+0

對不起,您沒有閱讀過「雲服務」。我不關心天藍色的網站。 Webroles獲得他們自己的虛擬機。 –

+0

剛剛編輯過,似乎Web角色正在全64位運行。 –

+0

謝謝。那就是我現在所處的位置,試圖調查爲什麼它會失敗。有趣的是,它實際上能夠在WebRole本身內運行,但在IIS中使用時不能運行。 –

0

您可以通過調用具有啓動任務的簡單腳本來更改IIS設置。

含有這些溶液中添加setup.cmd文件:

%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.enable32BitAppOnWin64:true 

    exit /b 0 

設置Copy to Output DirectoryCopy Always此文件。

將這些xml添加到您的ServiceDefinition.csdef文件中。

<Startup> 
    <Task commandLine="setup.cmd" executionContext="elevated" taskType="simple" /> 
</Startup> 

當您再次部署時,IIS將配置爲在32位中運行。