在 Windows 事件查看器中查看日志,看到 CSOL 因为缺少 Indeo IV41 解码器报警告。Indeo 是非常古老的视频编码器,在 Windows XP 以后,微软默认不再注册该视频编码器。XP 上古时期登录 CSOL时会有 3 张连续的过场动画,这段过场动画就是使用这老解码器播放的。包括像黑暗之门这类上古老图也使用了这些老解码器。大部分情况下,缺少 IV41 解码器不会产生太大问题,但是根据我的观察,连续发出的警告次数太多似乎会导致游戏突然闪退。就像如下这种情况,游戏在极个别情况连续发出很多次缺少解码器的警告(尤其是某些老图),接着就闪退了。

XP 之后 64 位操作系统不再默认注册 Indeo 解码器,但是这些解码器仍然被保留在 C:\Windows\SysWOW64 目录下。仍然可以通过手动注册的方式使用这些老解码器。

解决方案:
$currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
if ($currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
{
Copy-Item -Path $Env:WINDIR\SysWOW64\ir41_32original.dll -Destination $Env:WINDIR\SysWOW64\ir41_32.dll -Force
New-ItemProperty -Name "vidc.cvid" -Path "REGISTRY::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32" -Value "iccvid.dll" -PropertyType String -Force
New-ItemProperty -Name "vidc.iv31" -Path "REGISTRY::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32" -Value "ir32_32.dll" -PropertyType String -Force
New-ItemProperty -Name "vidc.iv32" -Path "REGISTRY::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32" -Value "ir32_32.dll" -PropertyType String -Force
New-ItemProperty -Name "vidc.iv41" -Path "REGISTRY::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32" -Value "ir41_32.dll" -PropertyType String -Force
New-ItemProperty -Name "vidc.iv50" -Path "REGISTRY::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32" -Value "ir50_32.dll" -PropertyType String -Force
}
else
{
$arguments = "& '" + $MyInvocation.MyCommand.Definition + "'"
Start-Process powershell -Verb runAs -ArgumentList $arguments
}
上述 powershell 脚本复制之后复制到文本文档,后缀名改成 .ps1,然后右键点击在 Powershell 中运行。


由于复制 SysWOW64 目录下的文件以及修改注册表需要管理员权限,所以该脚本会请求管理员权限,不放心的可以自己看下 powershell 脚本有没有问题。改完之后,再次打开游戏,就会发现在不开 Windows XP 兼容模式的情况下上古时代的登录过场动画又回来了,相应地,Windows 事件查看器里游戏也不再报警告。




XP 之后 64 位操作系统不再默认注册 Indeo 解码器,但是这些解码器仍然被保留在 C:\Windows\SysWOW64 目录下。仍然可以通过手动注册的方式使用这些老解码器。

解决方案:
$currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
if ($currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
{
Copy-Item -Path $Env:WINDIR\SysWOW64\ir41_32original.dll -Destination $Env:WINDIR\SysWOW64\ir41_32.dll -Force
New-ItemProperty -Name "vidc.cvid" -Path "REGISTRY::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32" -Value "iccvid.dll" -PropertyType String -Force
New-ItemProperty -Name "vidc.iv31" -Path "REGISTRY::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32" -Value "ir32_32.dll" -PropertyType String -Force
New-ItemProperty -Name "vidc.iv32" -Path "REGISTRY::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32" -Value "ir32_32.dll" -PropertyType String -Force
New-ItemProperty -Name "vidc.iv41" -Path "REGISTRY::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32" -Value "ir41_32.dll" -PropertyType String -Force
New-ItemProperty -Name "vidc.iv50" -Path "REGISTRY::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32" -Value "ir50_32.dll" -PropertyType String -Force
}
else
{
$arguments = "& '" + $MyInvocation.MyCommand.Definition + "'"
Start-Process powershell -Verb runAs -ArgumentList $arguments
}
上述 powershell 脚本复制之后复制到文本文档,后缀名改成 .ps1,然后右键点击在 Powershell 中运行。


由于复制 SysWOW64 目录下的文件以及修改注册表需要管理员权限,所以该脚本会请求管理员权限,不放心的可以自己看下 powershell 脚本有没有问题。改完之后,再次打开游戏,就会发现在不开 Windows XP 兼容模式的情况下上古时代的登录过场动画又回来了,相应地,Windows 事件查看器里游戏也不再报警告。


