☰
Windows 10/11/8 关闭dwm.exe进程的解决方法
2026/11/6 3:11:44 网站建设 项目流程

众所周知,从Windows 8开始,`dwm.exe``不再是可以关闭的可选进程,而是系统的必须组件。
但是据说巨硬不懂得优化,导致windows 10/11的dwm.exe占用的内存巨大。所以你总会想着要关闭dwm.exe,释放这个吃内存的鸡肋。
如果直接删除dwm.exe会导致系统启动之后黑屏,但是如果将dwm.exe替换成其他的exe文件,系统就不会黑屏。
基于这个尝试,本文介绍一种简单易行的“魔改”系统,关闭dwm.exe的办法。

目录

    • 1.替换dwm.exe
    • 2.替换explorer.exe
    • 3.总结 & 遇到的问题

需要的文件: pan.baidu.com/s/1iJ69EwrtdTMqLpbbc4iRZQ?pwd=96qk

1.替换dwm.exe

首先要知道,系统在检测不到dwm.exe时是会强制黑屏的,但是把dwm.exe替换成别的程序可以绕过这个限制。
这里编写一个空的exe程序,作为dwm.exe的占位符:

// small.cpp: 一个立即返回的空程序,可用于其他exe的占位符#include<windows.h>intWINAPIWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,intiCmdShow){return0;}

编译的命令 (-nostdlib是为了禁用链接标准库,减小exe体积,-mwindows是为了禁用控制台窗口):

g++ small.cpp -o dwm.exe -s -nostdlib -mwindows

然后进入WinPE系统,备份原来的dwm.exe,再把dwm.exe替换掉。
此外,如果不会c++,可以用下载的现成的dwm.exe替代。

2.替换explorer.exe

替换dwm.exe之后,成功解决了黑屏问题。但是后来发现explorer渲染到一半,整个界面就卡住了。
自己猜测原因可能是和explorer调用了dwm.exe的特定组件有关,所以解决办法出现了,就是不用系统自带的explorer,换成Cairo Desktop,或者Total Commander等类似软件。(如果官网无法打开,网盘中有备用的版本。)
以Cairo Desktop为例,这是自动启动Cairo Desktop的程序:

// explorer_cairo.cpp#include<windows.h>#include<cstring>#include<cstdio>#include<cwchar>usingnamespacestd;#defineMAX_COMMAND_LEN32768// Windows的实际最大命令行长度constwchar_t*SUBKEY=L"SOFTWARE\\WOW6432Node\\CairoShell";constwchar_t*VALUE_NAME=L"Install_Dir";constwchar_t*EXECUTABLE=L"CairoDesktop.exe";constwchar_t*APP_NAME=L"Cairo Shell";voidShowError(DWORD errorCode){LPVOID lpMsgBuf;DWORD dwFormatFlags=FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS;// 获取错误信息FormatMessageW(dwFormatFlags,NULL,errorCode,MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),(LPWSTR)&lpMsgBuf,0,NULL);// 显示错误消息MessageBoxW(NULL,(LPCWSTR)lpMsgBuf,L"Error",MB_OK|MB_ICONERROR);// 释放缓冲区LocalFree(lpMsgBuf);}voidrun_cmd(LPSTR args_to_show){// 无法找到Total Commander, 回退到cmd.exewchar_targs[MAX_COMMAND_LEN];snwprintf(args,sizeof(args),L"/k echo Cannot find %ls, Using Command Prompt instead. Arguments: \"",APP_NAME);wchar_targs_wide[MAX_COMMAND_LEN];MultiByteToWideChar(CP_UTF8,0,args_to_show,-1,args_wide,MAX_COMMAND_LEN);wcscat_s(args,args_wide);wcscat_s(args,L"\"");ShellExecuteW(NULL,L"open",L"cmd.exe",args,NULL,SW_SHOWNORMAL);}intWINAPIWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,intnShowCmd){HKEY hKey;wchar_tinstallDir[MAX_PATH],path[MAX_PATH];DWORD size=sizeof(installDir);// 打开注册表项,自动获取Total Commander所在的目录if(RegOpenKeyExW(HKEY_LOCAL_MACHINE,SUBKEY,0,KEY_READ,&hKey)==ERROR_SUCCESS){// 读取 InstallDir 值if(RegQueryValueExW(hKey,VALUE_NAME,NULL,NULL,(LPBYTE)installDir,&size)==ERROR_SUCCESS){// 构造 totalcmd.exe 的完整路径//wcscat_s(path,L"");wcscpy_s(path,installDir);// 确保路径以 \ 结尾if(installDir[size/sizeof(wchar_t)-1]!=L'\\'){wcscat_s(path,MAX_PATH,L"\\");}wcscat_s(path,EXECUTABLE);// 启动 totalcmd.exewchar_targs_wide[MAX_COMMAND_LEN];MultiByteToWideChar(CP_UTF8,0,lpCmdLine,-1,args_wide,MAX_COMMAND_LEN);HINSTANCE hInstance=ShellExecuteW(NULL,L"open",path,args_wide,NULL,SW_SHOWNORMAL);// 检查 ShellExecuteW 的返回值if((intptr_t)hInstance<=0x20){// 返回值 <= 0x20 表示出错//ShowError((DWORD)(intptr_t)hInstance);//return 1; // 返回非零值表示错误run_cmd(lpCmdLine);}}else{// 显示错误消息并返回非零值//ShowError(GetLastError());//return 1;run_cmd(lpCmdLine);}// 关闭注册表项RegCloseKey(hKey);}else{//ShowError(GetLastError());//return 1;run_cmd(lpCmdLine);}return0;// 正常结束}

编译:

g++ explorer.cpp -o explorer.exe -s -mwindows

然后按照同样的步骤,替换explorer.exe即可。另外如果不会c++,可以用下载的编译好的explorer.exe替代。

3.总结 & 遇到的问题

前面介绍了替换dwm.exe和explorer.exe的具体步骤。
经测试,替换后绝大部分软件是可以用的,不过Chrome、Edge、VSCode这些Chromium的软件需要添加--disable-gpu这个选项,否则界面会渲染不出来。
此外,自己实测win7下关闭了dwm之后调用GPU的游戏能正常运行,不过win10中关闭了dwm之后GPU就不能用了。
最后上图,可以发现关了dwm和explorer之后,内存只占了1.7GB:

Edge都能打开:

这是Windows 11关了dwm的截图,可以看到,任务管理器的侧栏渲染不出来:

启动了Cairo Desktop:

文章就到这里,欢迎点赞、收藏!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询