在 IIS 8.5 中以 32 位模式强制进程 运行

Force process to run in 32-bit mode in IIS 8.5

我有一个 ASP.NET MVC 应用程序,它是使用“Any CPU”编译和部署的。 它部署在 Windows Server 2012 R2 64 位标准的 IIS 8.5.9600.16385 上。

在 IIS 管理器 -> 应用程序池 -> 我的应用程序池 -> 高级设置中,我已将“启用 32 位应用程序”设置为真。

所以据我所知,如果这是真的,那意味着工作进程在 32 位中被强制 运行。如果设置为 false,则应用程序池在 64 位模式下 运行ning。所以在我的例子中,进程是 运行ning 在 32 位(因为我已经将该设置设置为 true)但是如果我打开任务管理器并检查 w3wp.exe 进程它显示为 w3wp.exe 而不是 w3wp*32.exe?为什么?这是否意味着进程在 32 位中不是 运行ning 而实际上它在 64 位中是 运行ning?

无论如何,我注意到如果设置“启用 32 位应用程序”为真,则 w3wp.exe 进程指向 C:\Windows\SysWOW64\inetsrv(此路径显示在任务的进程属性中manager) 而如果此设置为 false,则它指向 C:\Windows\System32\inetsrv.

那么我可以做以下假设吗?

可能 w3wp.exe 在以前版本的 IIS 中 运行 在 32 位模式下在任务管理器中显示为 w3wp*32.exe?在最新的 IIS 版本中,无论是 运行 32 位模式还是 64 位模式,这个进程总是显示为 w3wp.exe?

根据使用“AnyCPU”编译部署的MVC应用的运行ning结果,如果enable 32-bit application为false,则应用运行ning 在 64 位中,true 在 32 位中是 运行ning。关于“任意CPU”,可以参考.

两者的运行ning过程都是w3wp.exe,但是在不同的文件夹下,如您所见。如何运行现在找不到早期的IIS了,只有win7之前的系统才是早期的IIS版本,微软一直推荐64位的运行方式

在最新版本的IIS中,无论进程是32位还是64位,总是运行为w3wp.exe,而且找不到w3wp*32.exe在系统盘中。

所以对于你最初的问题,运行ning w3wp.exe from syswow64 并不意味着进程是 运行ning on 64-bit,它取决于应用程序本身。因为 MVC 设置为 Any CPU,所以在本例中它是 32 位的。如果应用程序本身将 64 位强制为 运行,它也可以 运行 因为 Process Interoperability.

下面是MVC中的代码,有需要的可以自己测试

public ActionResult About()
    {
        if (IntPtr.Size == 4)
        {
            ViewBag.message = "32-bit";
        }else if (IntPtr.Size == 8)
        {
            ViewBag.message = "64-bit";
        }
        else
        {
            ViewBag.message = "nothing";
        }
        return View();
    }
public ActionResult Contact()
    {
        ViewBag.Message = "Your contact page.";

        if (Environment.Is64BitProcess)
            Response.Write("64-bit process");
        else
            Response.Write("32-bit process");

        return View();
    }