一、问题现象

我在 RobotStudio 中启动 OmniCore FlexPendant 时,先后遇到了两个问题。

问题 1:点击 OmniCore FlexPendant 直接报错

报错内容类似:

RobotStudio .NET exception: 无效的注册表值
Base exception: Win32Exception
无效的注册表值
   在 System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
   在 System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
   在 RobotStudio.UI.Packages.VNextInstaller.<InstallVNext>d__4.MoveNext()
   ...
   在 RobotStudio.UI.Controller.Commands.LaunchVNext.<ExecuteAsync>d__1.MoveNext()

也就是说,RobotStudio 在启动 FlexPendant 时,调用 Windows 外部启动链路失败了


问题 2:报错解决后,又出现登录失败

后面修复了第一个问题,FlexPendant 能打开了,但又出现:

Login to Controller Failed
Please check whether the controller is ready to accept a connection and try to login again.

而且这个问题有两个特点:

  • 当前控制器已经启动并变绿

  • 新建一个全新的 RW 7.21 虚拟控制器,依然如此

说明这已经不是单个工程的问题了。


二、核心结论先说

这次其实是 两个问题叠加

第一个问题

Windows 对 .appx 的打开链路异常,导致 RobotStudio 一点击 OmniCore FlexPendant 就报:

无效的注册表值

第二个问题

.appx 启动恢复后,ABB FlexPendant 这个 UWP 应用没有放通 loopback,导致它无法连接本机虚拟控制器,于是出现:

Login to Controller Failed

三、排查过程


1. 先确认 App Installer 是否存在

用 PowerShell 查询:

Get-AppxPackage *DesktopAppInstaller*

我的结果里能看到:

Name              : Microsoft.DesktopAppInstaller
Version           : 1.28.220.0
Status            : Ok

说明系统里确实装了微软官方的 App Installer。


2. 验证 ms-appinstaller: 协议是否正常

try {
    Start-Process "ms-appinstaller:"
    "ms-appinstaller 协议调用:成功发起"
} catch {
    "ms-appinstaller 协议调用失败:$($_.Exception.Message)"
}

结果是可以成功发起。
这说明不是协议本身彻底坏掉。


3. 直接测试 ABB 的 .appx 能否被系统打开

FlexPendant 对应的包路径如下:

$fp = "C:\Users\byy\AppData\Local\ABB\RobotWare\FlexPendant\Apps_1.22.0\appx\ABB.Robotics.Apps.Shell_1.22.0.452_x64.appx"

直接测试:

try {
    Start-Process $fp
    "直接打开 ABB 的 .appx:成功发起"
} catch {
    "直接打开 ABB 的 .appx:失败 -> $($_.Exception.Message)"
}

结果报错:

This command cannot be run due to the error: Invalid value for registry.

这一步很关键,说明:

不是 RobotStudio 自己单独坏了,而是 Windows 处理 .appx 文件时就已经出问题了。


4. 再验证 ABB 的 .appx 包本身有没有坏

绕过 Start-Process,直接安装这个 .appx

Add-AppxPackage -Path $fp -ForceApplicationShutdown -Verbose

这一步可以成功。

说明:

  • ABB 这个 .appx 包本身没坏

  • 问题出在 Windows 打开 .appx 的链路

  • RobotStudio 正好依赖了这条链路,所以才报“无效的注册表值”


四、第一个问题的解决方法

既然是系统处理 .appx 的链路坏了,那就修系统组件。

执行:

sfc /scannow
DISM /Online /Cleanup-Image /RestoreHealth

我的执行结果是:

  • sfc /scannow 提示找到了损坏文件并成功修复

  • DISM /RestoreHealth 成功完成

然后重启电脑

重启后再次执行:

Start-Process $fp

这次已经不再报:

Invalid value for registry

而是能正常弹出 ABB FlexPendant 的安装/启动界面。

说明

到这里,第一个问题已经解决:

Windows 对 .appx 的 Shell 打开链路恢复正常。


五、第二个问题:为什么还是 “Login to Controller Failed”?

虽然 .appx 能打开了,但 FlexPendant 仍然无法登录控制器。

一开始我怀疑是:

  • 控制器没完全 ready

  • 启动太快

  • 当前 VC 有问题

所以我做了这些测试:

  1. 等控制器变绿后再点

  2. 多等一会儿再点

  3. 新建一个全新的 RW 7.21 虚拟控制器再测试

结果都一样,还是:

Login to Controller Failed

这说明:

问题不在某个控制器工程,而在 FlexPendant 到本机 VC 的通信链路。


六、真正导致 Login Failed 的原因

后面排查发现,ABB Robotics FlexPendant 是一个 UWP / AppContainer 应用
这种应用要访问本机 localhost 服务时,通常需要放开 loopback

而虚拟控制器正是运行在本机,所以如果 loopback 没放通,就会出现这种现象:

  • 应用能打开

  • 但始终登录不到本机控制器


七、第二个问题的解决方法

1. 先确认 FlexPendant 包已经安装

Get-AppxPackage *FlexPendant* | Format-List Name, PackageFullName, PackageFamilyName, InstallLocation

结果类似:

Name              : ABBRobotics.FlexPendant
PackageFullName   : ABBRobotics.FlexPendant_1.22.0.452_x64__v6d5zyx203t42
PackageFamilyName : ABBRobotics.FlexPendant_v6d5zyx203t42

2. 查 AppContainer 的 SID

Get-ChildItem "HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Mappings" |
ForEach-Object {
    $p = Get-ItemProperty $_.PSPath -ErrorAction SilentlyContinue
    if ($p.Moniker -like "*ABBRobotics.FlexPendant*") {
        [pscustomobject]@{
            SID = $_.PSChildName
            Moniker = $p.Moniker
            DisplayName = $p.DisplayName
        }
    }
}

我这里查到的 SID 是:

S-1-15-2-3646210811-1003242304-747625828-2040334373-3821629615-1507261120-3678927528

3. 给 ABB FlexPendant 加 loopback 例外

执行:

CheckNetIsolation LoopbackExempt -a -p=S-1-15-2-3646210811-1003242304-747625828-2040334373-3821629615-1507261120-3678927528

然后检查是否添加成功:

CheckNetIsolation LoopbackExempt -s

只要输出里能看到类似:

abbrobotics.flexpendant_v6d5zyx203t42

就说明加成功了。


八、最终操作顺序

我最后是按这个顺序彻底解决的:

第一步:修复 Windows 组件

sfc /scannow
DISM /Online /Cleanup-Image /RestoreHealth

第二步:重启电脑

第三步:确认 .appx 已经能正常打开

Start-Process $fp

第四步:给 FlexPendant 加 loopback 例外

CheckNetIsolation LoopbackExempt -a -p=你的SID

第五步:关闭 FlexPendant 和 RobotStudio,再重新打开

第六步:启动 RW 7.21 虚拟控制器,等待变绿,再点 OmniCore FlexPendant

最终恢复正常,可以直接进入使用。


九、最终总结

这次问题表面看起来像一个问题,实际上是两个问题串在一起:

问题一:.appx 启动链路损坏

表现为:

  • RobotStudio 点 OmniCore FlexPendant 报 无效的注册表值

  • Start-Process xxx.appx 同样报错

  • Add-AppxPackage -Path xxx.appx 可以成功

解决方法:

sfc /scannow
DISM /Online /Cleanup-Image /RestoreHealth

问题二:FlexPendant 无法连接本机虚拟控制器

表现为:

  • FlexPendant 能打开

  • 但一直 Login to Controller Failed

  • 当前 VC、新建 VC 都一样

解决方法:

CheckNetIsolation LoopbackExempt -a -p=<FlexPendant 对应 SID>

十、最后附上本次真正用到的关键命令

Get-AppxPackage *DesktopAppInstaller*

try {
    Start-Process "ms-appinstaller:"
    "ms-appinstaller 协议调用:成功发起"
} catch {
    "ms-appinstaller 协议调用失败:$($_.Exception.Message)"
}

$fp = "C:\Users\byy\AppData\Local\ABB\RobotWare\FlexPendant\Apps_1.22.0\appx\ABB.Robotics.Apps.Shell_1.22.0.452_x64.appx"

Start-Process $fp
Add-AppxPackage -Path $fp -ForceApplicationShutdown -Verbose

sfc /scannow
DISM /Online /Cleanup-Image /RestoreHealth

Get-AppxPackage *FlexPendant* | Format-List Name, PackageFullName, PackageFamilyName, InstallLocation

Get-ChildItem "HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Mappings" |
ForEach-Object {
    $p = Get-ItemProperty $_.PSPath -ErrorAction SilentlyContinue
    if ($p.Moniker -like "*ABBRobotics.FlexPendant*") {
        [pscustomobject]@{
            SID = $_.PSChildName
            Moniker = $p.Moniker
            DisplayName = $p.DisplayName
        }
    }
}

CheckNetIsolation LoopbackExempt -a -p=S-1-15-2-3646210811-1003242304-747625828-2040334373-3821629615-1507261120-3678927528
CheckNetIsolation LoopbackExempt -s

十一、总结

RobotStudio 启动 OmniCore FlexPendant 报“无效的注册表值”,本质上是 Windows 的 .appx 打开链路异常;修好后如果又出现 Login to Controller Failed,大概率还需要给 ABB FlexPendant 放开 loopback,两个问题往往是连续出现的。


Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐