我管理着 50 多台机器,它们在使用某些旧版软件时遇到了错误。我与开发人员进行了交谈,他们建议将每个系统上大约十几个应用程序的兼容性选项更改为以管理员身份运行。
所有机器都设置为 UAC 不会通知,所以这不是问题,所有相关文件夹都是共享的,但是我无法执行\\MACHINE_NAME\path\to\apps\
、右键单击app.exe
、单击属性,然后更改兼容性选项卡中的任何选项。此外,您无法在远程控制机器时批量选择应用程序并一次性设置它们,它们必须单独完成,我必须中断用户的工作流程才能执行此操作。我知道可以根据注册表中的以下方式更改正常的兼容性选项这个问题但是以管理员身份运行标志是否也出现在那里?
有没有什么办法可以更优雅地处理这个问题?
答案1
管理员标志也确实出现在那里,被称为RUNASADMIN
。
要在 Windows 中以编程方式设置应用程序兼容性设置,请将注册表值添加到以下位置之一:
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
(仅限当前用户)HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
(适用于系统上的所有用户)
注册表值应具有可执行文件的完整路径作为名称,属于类型REG_SZ
,并包含空格分隔兼容性标志列表作为数据。最多可以配置 3 种不同的兼容性设置:
特权级别:
RUNASADMIN
- 使用管理安全令牌运行该程序
显示设置:
DISABLETHEMES
- 禁用视觉主题640X480
- 以 640 x 480 屏幕分辨率运行HIGHDPIAWARE
- 禁用高 DPI 设置下的显示缩放256COLOR
- 以 256 种颜色运行DISABLEDWM
- 禁用桌面组合
兼容模式:
WIN95
Windows 95WIN98
Windows 98WIN4SP5
- Windows NT 4.0 SP5WIN2000
Windows 2000WINXPSP2
Windows XP SP2WINXPSP3
Windows XP SP3VISTARTM
- 远景VISTASP1
Vista SP1VISTASP2
- Vista SP2WIN7RTM
- Windows 7的WINSRV03SP1
Windows 服务器 2003 SP1WINSRV08SP1
Windows 服务器 2008 SP1
例如,以下标记可执行文件需要 Windows XP SP3 的管理权限和兼容模式:
reg.exe ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "C:\temp\compatmodel\iconsext.exe" /t REG_SZ /d "WINXPSP3 RUNASADMIN" /f
要远程应用此功能,请使用组策略推送注册表设置,远程执行类似上述命令,或启用远程注册表服务并使用它来应用设置。
答案2
对于那些希望通过 PowerShell 执行此操作的用户:
这是使用 HKCU,如果您需要 HKLM,请查找/替换它。我发现 HKLM 版本不起作用,只有 HKCU。可能需要重新启动。
#create the key if it doesn't exist already
if(-not (Test-Path -Path "HKCU:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags"))
{
$_ = New-Item -Path "HKCU:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\" -Name "AppCompatFlags"
}
if(-not (Test-Path -Path "HKCU:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"))
{
$_ = New-Item -Path "HKCU:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\" -Name "Layers"
}
#create the value
$_ = New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" -Name "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe" -PropertyType String -Value 'RUNASADMIN'