如何从命令行设置可执行文件的兼容模式?

Roo*_*ook 23 windows windows-7 compatibility windows-xp

有没有办法从命令行将与 XP 选项兼容性(右键单击/属性/兼容性......那个,是的:) 设置为可执行文件?

或者更好的是,有没有办法为整个目录(目录中的可执行文件)设置兼容性,以便每个被编译/构建的可执行文件都已经有了那个“标志”?

Rob*_*ert 32

我不知道允许设置或更改应用程序兼容性标志的工具。

但是,应用程序兼容标志存储在注册表(用户或系统部分)中:

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
Run Code Online (Sandbox Code Playgroud)

因此,您可以使用标准命令行注册表编辑器来创建所需的条目:

reg.exe Add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "C:\Program Files\MyApp\Test.exe" /d "WINXPSP3"
Run Code Online (Sandbox Code Playgroud)

有关可用标志的更多详细信息,请参阅博客文章以管理员身份或在兼容模式下运行应用程序

  • 右键单击 > 属性 > 兼容性的正常行为是在 HKCU 下设置键,除非按下“更改所有用户的设置”按钮。然后它在所有用户的 HKLM 下设置,并且不能通过对话框更改。 (2认同)

小智 18

在批处理文件中使用:

> set __COMPAT_LAYER=WinXP
Run Code Online (Sandbox Code Playgroud)

在 .exe 调用之前

看:

  • +1 通过 .bat 启动 .exe 似乎是侵入性最小的解决方案 (3认同)

Mik*_*own 11

罗伯特的回答是准确的。稍微扩展一下,并回答OP关于设置模式的问题......

如果您有一个装满 .exe 文件的文件夹要处理,您可以这样做:

for %x in ("*.exe") do reg.exe Add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "%~fx" /d "WINXPSP3"
Run Code Online (Sandbox Code Playgroud)

此示例使用 HKCU 而非 HKLM;一定要选择你真正想要的。

要删除设置,每个设置都有确认提示:

for %x in ("*.exe") do reg.exe Delete "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "%~fx"
Run Code Online (Sandbox Code Playgroud)

/f如果您不想收到确认提示,请添加到最后。

(如果您对这个答案投了赞成票,请也投给罗伯特!)