反恐精英ol吧 关注:4,117,503贴子:164,777,084
  • 6回复贴,共1

解决CSOL因为缺少Indeo IV41解码器导致游戏闪退问题

取消只看楼主收藏回复

在 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 事件查看器里游戏也不再报警告。




IP属地:江苏1楼2024-04-14 15:47回复
    复制代码有问题的可以访问这个链接https://macrohard.fun/downloads/2024/04/14/RegisterOldDecoders.ps1
    复制上面的代码到 txt 文档,保存之后把文件后缀改成 .ps1。
    不建议在网页里右键另存为下载代码,Poweshell 默认执行策略阻止从互联网下载的无签名代码文件运行。
    非要偷懒另存为的话,除了把后缀名改成.ps1,还要右键属性解除锁定才能运行。
    或者以管理员身份运行 powershell,Set-ExecutionPolicy RemoteSigned,给远程下载的脚本文件签名。


    IP属地:江苏8楼2024-04-14 22:55
    收起回复
      2025-08-27 14:39:28
      广告
      不感兴趣
      开通SVIP免广告
      新一版 powershell 文件已经发布,可以去网站复制了。因不同版本 windows 自带的 powershell 版本五花八门,从 2.0 到 5.1 都有,恕无法考虑到所有需要兼容的细节,因此若运行脚本碰到问题可反馈。此外,本脚本假定你使用的是 Windows 7 及以上的64 位操作系统(32 位操作系统应该没人用了吧)。


      IP属地:江苏32楼2024-04-20 16:18
      收起回复
        在这里说明一下,不是什么问题都是这里提及的缺少解码器导致的。这个游戏存在的可触发闪退的方式非常多,出现了异常崩溃问题应该到 Windows 事件查看器中查看崩溃提示信息。游戏异常崩溃问题存在已久,原因多样,基本上是无法由玩家自行解决的。

        例如,这里提示的崩溃信息是 hw.dll 模块,具体分析方法涉及到反汇编,此处不再详谈。hw.dll 是游戏开发者编写的动态链接库文件,这样的报错信息只能说明游戏内存在漏洞。

        这个报错信息提示的出错模块是 urctbase.dll,这是微软提供的标准 C 运行时,那么这是不是意味着是微软的锅呢?概率极其低,原因是游戏在运行过程中需要大量的调用微软 C/C++ 库中的各种函数,调用时若未对某些参数进行正确的检查,例如传入非法指针造成 access violation,那么程序就会在运行时崩溃。所以仍然可以肯定的讲,是这个游戏自身的问题。
        从另一个角度来说,像 ucrtbase.dll 这样的运行时库几乎是所有现代 Windows 乃至于 Windows 本身的根基,一旦这里出现这样严重的问题,对于 Windows 操作系统本身的打击几乎是毁灭性的,因而出现上面这样应用程序在运行时崩溃的问题几乎可以 100% 确定是游戏开发者自身问题。
        总之,崩溃问题存在已久,作为玩家基本上是没有任何办法自行处理的,在没有任何程序开发经验的情况下,一般玩家遇到此类问题也不要胡乱怀疑是不是 Windows 11 的问题,CPU 的问题,等等诸如此类不合理的猜测。


        IP属地:江苏45楼2024-10-12 18:28
        回复


          Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned


          修改执行策略后即可正常运行 powershell 脚本。


          IP属地:江苏53楼2025-07-01 00:54
          收起回复
            运行效果:


            IP属地:江苏54楼2025-07-01 00:57
            回复
              @謎情啊
              右键 ps1 文件,复制地址

              输入 & 后,粘贴复制的地址,然后回车运行


              应该看到如下输出:


              IP属地:江苏57楼2025-07-01 21:25
              回复