VBScript中的WScript.Shell在Windows RT上无法正常工作

3
在Surface平板电脑上运行Windows RT时,我正在运行一个VB脚本,该脚本的第一行失败了,该行内容为:
Set WshShell = WScript.CreateObject("WScript.Shell")

错误消息显示:

无法创建带有错误代码 80070005 的对象 WScript.Shell。

这似乎是涉及访问权限的通用错误代码。你有任何想法吗?
我正在使用管理员权限运行。
2个回答

1
Windows RT(也称为Windows 8 RT,Windows 8.1 RT和Surface RT)使用用户模式代码完整性(UMCI)来限制允许运行的软件。
对于VBScript而言,UMCI的代码完整性组件仅允许创建“启发式”COM对象。
“哪些COM对象是启发式的?”你问道。好问题。让我们在我们的Windows RT设备上使用PowerShell来帮助我们找出答案。
$arrInstances = @(Get-WMIObject -ClassName 'Win32_COMSetting')
$arrCOMObjectProgIDs = @($arrInstances | Where-Object { $null -ne $_.ProgId } |
    ForEach-Object { $_.ProgId })

$ErrorActionPreference = [System.Management.Automation.ActionPreference]::SilentlyContinue
$result = @($arrCOMObjectProgIDs | ForEach-Object { if (New-Object -ComObject $_) { $_ } })
$result

在我完全打了补丁的Surface 2设备上,截至今天2021年1月17日,仅有带有ProgID的受启发式COM对象(即仅可在Windows RT上从VBScript调用的对象)为:

  • Scripting.FileSystemObject
  • VBScript.RegExp
  • Scripting.Dictionary
在Windows RT上由于用户模式代码完整性(UMCI)的限制,无法创建其他VBScript对象(例如WScript.Shell,WScript.Network,WinNTSystemInfo,Wbemscripting.SWbemLocator等)。
要获取更稳健版本的上述代码,请查看我的脚本“Get-COMObjectsProgIDsAllowedToLaunch.ps1”,发布在我的GitHub存储库中:https://github.com/franklesniak/PowerShell_Resources

0

我在一些地方看到有人评论说RT不允许VBScript运行WScript.Shell,尽管我没有找到任何官方文件证明这一点。

可能只是脚本需要以管理员特权运行。


我正在使用管理员权限运行。 - jwarnick
由于我没有RT设备可用,所以我只能猜测可能不可能。我发现关于让特定命令工作/不工作的信息相互矛盾,也没有来自MSDN或其他更“官方”的来源的硬线索。@user2839815 - AnonJr
我也开始有同样的想法了。感谢你的搜索。 - jwarnick
1
Windows RT 使用用户模式代码完整性(UMCI)功能,该功能可防止 VBScript 创建 WScript.Shell 和许多其他对象。 - Frank Lesniak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接