0

在 Azure 下运行的 C# 应用程序中,我需要使用 Interop / DllImport在ieframe.dll中调用“IEGetProtectedModeCookie”

这是签名:

  [DllImport("ieframe.dll", CharSet = CharSet.Unicode, EntryPoint = "IEGetProtectedModeCookie", SetLastError = true)]
  public static extern int IEGetProtectedModeCookie(String url, String cookieName, StringBuilder cookieData, ref int size, uint flag);

我已将 ieframe.dll 添加到我的项目的 bin 目录中,并且我有一个对SHDocVw的引用,它在我的 obj 目录中生成 Debug 或 Retail Interop.SHDocVw.dll文件。

当我在我的开发盒上进行测试时,一切正常,但是当我部署到 Azure 时,我收到以下运行时错误:

System.EntryPointNotFoundException:无法在 DLL 'ieframe.dll' 中找到名为 'IEGetProtectedModeCookie' 的入口点。在 Predicere.Utilities.LoginUtils.GetProtectedModeIECookieValue(String cookieName, Boolean isFacebookPage) 中的 Predicere.Utilities.LoginUtils.GetProtectedModeIECookieValue(String url, String cookieName, StringBuilder cookieData, Int32& size, UInt32 flag) ...

我在这里想念什么?

4

2 回答 2

0

IEGetProtectedModeCookie 是在 IE8 中引入的。难道是只安装了IE6或IE7?

于 2011-09-14T22:19:08.613 回答
0

所以,我们终于找到了一个解决方案,使用来自 SO 的反馈来解决另一个单独但相关的问题。

问题是 IEGetProtectedModeCookie 直到 IE8 才引入,但基线 Azure Web 实例基于 IE7。

操作系统风格由 osFamily 属性控制:

<ServiceConfiguration serviceName="Foobar" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*">

此设置安装基于 IE7 的 Windows Server 2008 SP2。

如果我们如下修改 osFamily 属性,我们最终会得到基于 IE8 的 Windows Server 2008 R2:

<ServiceConfiguration serviceName="Foobar" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="2" osVersion="*">

可以在此博客条目中找到更多详细信息,尤其是如果您想升级您的 Azure 实例以使用 IE9(事实证明,这很重要)。

http://sajojacob.com/blog/2011/03/startup-tasks-elevated-privileges-vm-role/

于 2011-10-21T22:05:34.037 回答