IE9 Javascript 引擎(代号“Chakra”)的 ProgId 或 CLSID 是什么

2023-12-30

使用 .NET,我可以编写一个应用程序,该应用程序托管符合 Microsoft 的 IActiveScript 约定的脚本引擎。这包括 Microsoft 的 JScript 和 VBScript,以及 PerlScript、RubyScript 和不知道第三方还有什么 http://en.wikipedia.org/wiki/Windows_Script_Host#Available_Scripting_Engines.

在代码中执行此操作的方法是这样的:

    Type engine = Type.GetTypeFromProgID(progId, true);
    _engine = Activator.CreateInstance(engine) as IActiveScript;

哪里的progId可以采用 Javascript、JScript、ECMAScript、VBScript 等值。您可以在运行 cscript.exe 时执行类似的操作,在命令行上指定 progId//E选项。例如,这个命令:

cscript.exe  <file>  //e:JScript

..将通过 JScript 引擎运行指定的文件,无论其扩展名如何。

在我的机器上,如果我查看HKLM\SW\Classes\,三个progIds {Javascript, JScript, ECMAScript}都指向同一个CLSID,我猜测是JScript 5.8脚本引擎:{f414c260-6ac0-11cf-b6d1-00aa00bbbb58}

是否有我可以指定的 ProgId 或 CLSID 来运行 IE9 的 Javascript 引擎(又名“Chakra”)?

IE9 的引擎仍然由 IActiveScript 加载吗?
微软的文档表明确实如此 http://msdn.microsoft.com/en-us/library/xawadt95%28v=VS.94%29.aspx,但不指定 ProgId 或 CLSID。


随 IE9 安装的 Chakra Javascript 引擎的 CLSID 是
{16d51579-a30b-4c8b-a276-0ff4dc41e755}.

InProcServer32 是%windir%\System32\jscript9.dll .

我找不到 ProgId。这有点奇怪;通常成对的 ProgId 和 CLSID 条目相互引用。对于给定的 COM 对象,注册表中的 ProgId 项有一个名为 CLSID 的子项,并且 CLSID 注册表项有一个名为 ProgId 的子项,它们相互引用。但 IE9 CLSID 的 ProgId 子键是“JScript”,这当然是指 v5.8 Jscript CLSID。不确定这是微软的错误,还是故意的混淆,因为他们不希望任何人在 IE9 之外使用 Chakra 引擎。对我来说看起来是有目的的。


我通过在注册表中搜索 jscript9.dll 了解到了 CLSID。


如果您有托管脚本引擎的 .NET 代码,则可以直接使用 CLSID 实例化 IE9 javascript 引擎(“Chakra”)的 IActiveScript 对象。代码需要是这样的:

private const string clsIdPattern =
    @"^(?<curly>\{)?[a-zA-Z0-9]{8}(?:-[a-zA-Z0-9]{4}){3}-[a-zA-Z0-9]{12}(?(curly)\})$";

public ScriptEngine(string language)
{
    if (language == null)
        throw new ArgumentNullException("language");

    Type engineType = null;

    if (Regex.IsMatch(language, clsIdPattern))
    {
        // it's a CLSID
        var guid = new System.Guid(language);
        engineType = Type.GetTypeFromCLSID(guid, true);
    }
    else
    {
        // assume vanilla progId
        engineType = Type.GetTypeFromProgID(language, true);
    }

    var engine = Activator.CreateInstance(engineType) as IActiveScript;

在上文中,clsIdPattern是一个与熟悉的 GUID 格式匹配的正则表达式,可以带或不带花括号。

根据上面的代码,您可以传递“jscript”、“Javascript”或“ECMAScript”并获取 v5.8 JScript 引擎。或者您可以传递“{16d51579-a30b-4c8b-a276-0ff4dc41e755}”并获取 IE9 Javascript 引擎。显然,您需要安装 IE9 才能正常工作。

我刚刚尝试过这个,它适用于简单的情况。我很快就会再玩这个。


如果你想从 WSH 运行 Chakra,比如从 cscript.exe,那么你将需要一个 ProgId,我想。
如果我在注册表中创建“Chakra”作为 Progid,引用正确的 CLSID,我可以通过 IE9 的引擎运行 JS 文件,如下所示:

cscript.exe  module.js  //E:Chakra 

例如,插入新的“Chakra”ProgId 后,给出如下脚本:

WScript.Echo( ScriptEngineMajorVersion() + "." +
              ScriptEngineMinorVersion() + "." +
              ScriptEngineBuildVersion());

...输出是这样的:

C:\dev\js>Version.js
5.8.16982

C:\dev\js>cscript.exe Version.js  //E:Chakra
9.0.16434

以下是在 Javascript 中测试 AES 加密的结果,将 Chakra 与 JScript 5.8 进行比较:

C:\dev\js\SlowAES>cscript.exe test.aes.js
AES encryption in Javascript.
password  : Albatros1
salt      : saltines (73616c74696e6573)
iterations: 1000
key       : 172,52,20,51,98,71,49,195,14,31,141,51,129,8,94,66
iv        : 212,27,28,156,83,245,0,35,176,157,45,141,209,143,158,248
plaintext : Hello, /r/javascript.
ciphertext: fdebac9f1ed1a13bac58f3cc6558e8b0367a94245dbbfe53cacc4979799fc182
decrypted : Hello, /r/javascript.
elapsed   : 5011ms

C:\dev\js\SlowAES>cscript.exe test.aes.js //E:Chakra
AES encryption in Javascript.
password  : Albatros1
salt      : saltines (73616c74696e6573)
iterations: 1000
key       : 172,52,20,51,98,71,49,195,14,31,141,51,129,8,94,66
iv        : 212,27,28,156,83,245,0,35,176,157,45,141,209,143,158,248
plaintext : Hello, /r/javascript.
ciphertext: fdebac9f1ed1a13bac58f3cc6558e8b0367a94245dbbfe53cacc4979799fc182
decrypted : Hello, /r/javascript.
elapsed   : 2593ms

为了在我的注册表中设置 ProgId,我使用了以下命令:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{16d51579-a30b-4c8b-a276-0ff4dc41e755}\ProgID]
@="Chakra"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{16d51579-a30b-4c8b-a276-0ff4dc41e755}\ProgID]
@="Chakra"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Chakra]
@="JScript Language"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Chakra\CLSID]
@="{16d51579-a30b-4c8b-a276-0ff4dc41e755}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Chakra\OLEScript]

为了取消暴露 Chakra 或恢复注册表,我这样做了:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{16d51579-a30b-4c8b-a276-0ff4dc41e755}\ProgID]
@="JScript"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{16d51579-a30b-4c8b-a276-0ff4dc41e755}\ProgID]
@="JScript"

[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Chakra]

该注册表脚本适用于 x64 Windows;如果您没有 x64,那么您需要删除 WOW6432Node 行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IE9 Javascript 引擎(代号“Chakra”)的 ProgId 或 CLSID 是什么 的相关文章

  • 从 Angular 6 服务中绑定图像

    我有一个端点 它根据某些参数为我提供图像 这不是一个图像网址 而是一个普通图像 因此 当我到达邮递员中的端点时 作为响应 我收到一张图像 JPG 我是否可以在变量中接收该图像并将其绑定到 HTML 标签中 所有问题都有将图像 url 映射到
  • Vue js按钮冻结dom

    我试图在按下按钮时切换包含加载动画的跨度 直到使用 v if 函数完成 但是当我按下按钮时 DOM 冻结并且 span 元素保持不变 直到函数调用结束 如何让 DOM 不冻结并显示加载图标 非阻塞按钮按下可能是一个解决方案 HTML
  • 将字符串转换为变量名。 (JavaScript)

    我确实查看了前面的问题 但它们是针对整数值的 我需要文本值的答案 我在本周早些时候问了一个与此相关的问题 但现在是这样 如下所示 我使 Make x 等于某个字符串值 Acura Honda Toyota 当我将 Make x 传递到函数
  • 如何找到可能直接或间接调用给定方法的所有单元测试? (。网)

    如何找到可能直接或间接调用给定方法的所有单元测试 当我改变方法时 我希望知道要运行的最佳测试 必须有一个工具可以做到这一点 由于我们有很多接口 所以我对所有在实现接口的类上至少有一个路径 var 植入方法时调用接口上的方法的单元测试感兴趣
  • 如何在 Jest 测试中模拟 StatusBarManager.getHeight?

    我正在使用 expo 34 并且反应本机用户界面库 https www npmjs com package react native ui lib来自 wix 并且在为我的组件设置笑话测试时遇到问题 问题看起来出现在link https g
  • 赋予 d3 序数轴标签与尺度名称不同

    我有一个序数scale具有不同值的某些标签 我想显示该比例的轴 其中轴标签与比例标签不同 我有这个代码 var width 1000 var height 600 var margins left 100 40 right 25 botto
  • Angular UI.Bootstrap 单选按钮在 ng-repeat 中表现得很奇怪[重复]

    这个问题在这里已经有答案了 我在 Angular 的 ui bootstrap 中动态生成无线电模型的选项时遇到问题 我想我可以简单地对数组进行 ng repeat 使用 btn radio 属性的内容 如下所示 in the contro
  • JQuery _renderItem 没有被调用

    我正在尝试使用 renderItem 函数创建自定义 ui menu item 元素 但经过可能尝试后 我什至无法调用该函数 自动完成功能正在工作 但就像 renderItem 函数不存在一样 这是我的脚本部分
  • 函数声明或函数表达式

    我刚刚在块作用域中定义函数时遇到了问题 考虑以下程序 try greet function greet alert Merry Christmas catch error alert error 我希望这个程序能够发出警报Merry Chr
  • 传单 - 导入 Geojson - Angular 6

    我尝试将 GeoJson 文件导入到 Angular 的应用程序 6 中的传单中 通过这个解决方案 我的 geojson 是在 leafletmap 中绘制的 但我有这个错误 我无法构建我的应用程序 有人知道一种解决方案吗 错误 TS234
  • jQuery live() 和ready() 之间的区别?

    两者之间的确切区别是什么live and ready 编辑 发现die http docs jquery com Events die是相反的live ready http docs jquery com Events ready让你注册一
  • jQuery 面板滑块通过单击按钮打开但不会关闭

    我的页面上有一个按钮 可以使用 jquery 和 Modernizr 框架打开右侧面板 按钮位于屏幕最右侧 单击时 它会向左滑动并打开打开的面板 问题是 再次单击时它不会滑回到原来的位置 HTML div class cd panel fr
  • 如何让无限滚动发挥作用?

    我正在尝试让这个无限加载脚本在我的项目中工作 这是我的 HTML div div div class pagina div div class pagina div div class pagina div div class pagina
  • 当元素具有多个类时如何在 switch 语句中检查 className

    在下面的示例中 我只想单击该选项以在警报中显示 我正在尝试使用 switch 语句来确定单击了哪个类 如果我的 div 不包含多个类 则我的示例将有效 我尝试使用classList contains在我的 switch 语句中无济于事 有没
  • NodeJS 中的缩进多行日志记录

    我要打印JSON stringify d 反对控制台 将上下文作为 Mocha 测试套件输出的一部分 当测试缩进时 我希望对象日志行向右缩进足够远 例如 3 4 个制表符空格 以便它们可以识别地位于右侧describe group 我怎样才
  • 为什么在 .net 中使用 Invoke on Controls? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么 NET不允许跨线程操作 https stackoverflow com questions 2896504 why net does not allow cross thread operat
  • jVectorMap - 向下钻取地图 - 自定义背景

    我正在使用 jVectorMap 中的向下钻取地图 并且尝试将自定义背景颜色设置为地图的第二层 为了自定义主级别 我使用 main 参数 但我不知道如何将其扩展到地图的较低级别 提前致谢 马切伊 None
  • Javascript 替换为正则表达式无法正常工作

    我正在尝试使用正则表达式验证名称 正则表达式阻止用户连续输入 2 个空格或点 这是我的代码 function test input var regex A Za z 0 1 s 0 1 input value input value rep
  • 为什么对于整数键,“Map”操作比 JavaScript (v8) 中的“Object”慢得多?

    我很高兴使用Map对于在我的 JavaScript 代码库中随处访问的索引 但我刚刚偶然发现了这个基准 https stackoverflow com a 54385459 365104 https stackoverflow com a
  • ES6解构对象赋值函数参数默认值

    您好 我正在查看在传递函数参数时使用对象解构的示例对象解构演示 https developer mozilla org en US docs Web JavaScript Reference Operators Destructuring

随机推荐

  • 禁用自动更改检测可能会在 EF 中导致哪些错误?

    我最近通过禁用自动更改检测来调整运行速度非常慢的应用程序的一部分 Context Configuration AutoDetectChangesEnabled false 在执行批量删除之前 然后重新启用它并保存更改 我读了几个不同的来源解
  • CSS 浮动 - IE6 中的内容掉落

    我的布局左侧有一个菜单 DIV 它以固定的 EM 宽度向左浮动 然后我有一个内容 DIV 其左边距大于菜单的宽度 因此它很好地位于菜单右侧 并用菜单和内容完美排列来填充剩余空间 然而 在 Internet Explorer 6 中 如果内容
  • 如何部署具有不同参数的 Azure 函数的多个副本

    我当前正在运行一个 Azure 函数 定期从 REST API 提取数据并将数据复制到一组文件 它工作正常 但目前的架构是迭代 100 个不同的参数 理想情况下 负载是独立的 有没有办法多次部署 Azure 函数 并为每个实例使用不同的静态
  • RefactoringTool:ParseError:错误输入:类型= 22,值='='

    我正在重构一些 python2 代码并使用 2to3 模块将其更改为 python3 我收到以下解析错误 RefactoringTool There was 1 error RefactoringTool Can t parse helpe
  • 单击按钮后,在单击事件正在进行时在按钮上显示微调器图标

    我试图在提交时加载时在按钮上显示微调器 我已经看到了几个实现并在我的应用程序中进行了尝试 但它不起作用 这里是fiddle http jsfiddle net q1d06npq 5 我正在尝试描述这一点 我想提一下另一件事 这个 HTML
  • Flex:DataGrid 数字列格式

    我正在尝试格式化 DataGrid 列中的一些数字 当我运行下面的简化测试程序时 出现错误 到目前为止我看到的所有示例都有字符串的列数据 有没有办法用数字来做到这一点 如何修改下面的代码以格式化checking价值观
  • 设置与主题样式不同的本地隐式样式/替代 BasedOn DynamicResource

    想象一个 wpf 应用程序 我可以在其中动态更改主题 我通过在应用程序资源级别替换 ResourceDictionaries 来实现此目的 主题资源字典具有为 TextBox 等定义的隐式样式 现在 我的应用程序中有一部分文本框应该具有这种
  • Unity框架DependencyAttribute仅适用于公共属性?

    我试图清理代码中的一些可访问性内容 无意中破坏了 Unity 依赖注入 一段时间后 我意识到我标记了一些我并不真正希望在 DLL 外部暴露给内部的公共属性 然后我开始遇到异常 所以看来在Unity中使用 Dependency 属性只适用于公
  • Jackson 序列化忽略时区

    我使用下面的代码来序列化从外部服务获取的响应 并返回 json 响应作为我的服务的一部分 但是 当外部服务返回时间值和时区 10 30 00 000 05 00 时 杰克逊会将其转换为 15 30 00 如何忽略时区值 public int
  • 使用 jQuery 单击后禁用链接

    我有许多链接 A 元素 样式为 btn 类的按钮 当单击其中之一时 我希望禁用该特定按钮 这段代码不起作用 btn on click function e this prop disabled true 有大量的教程用于防止表单提交按钮的默
  • 不使用 Newtonsoft json 而是使用 System.Web.Script.Serialization.JavaScriptSerializer 反序列化具有不同数据类型的 json 字段

    我在反序列化 json 数据时遇到问题 该数据可以同时具有浮点或数组类型的数据 同样的问题来自这里在 C 中处理包含不同类型的 JSON 字段 https stackoverflow com questions 27131664 deali
  • 如何提高 teamcity 构建性能?

    我的项目有以下步骤 build 单元测试 测试覆盖率 重复项查找器 fx cop 有没有办法让TeamCity并行执行2 5个步骤 我可以为此使用多个构建代理吗 是的 假设您至少有四个构建代理 您可以执行以下操作 Under MyProje
  • Azure 逻辑应用 - 从 URL 下载文件

    我在逻辑应用程序中有一个要求 我需要从网站 URL 执行 HTTP GET 该网站 URL 提供了我需要下载到 Azure 文件存储的文件 我可以调用可下载 URL 但不确定如何将文件下载到 Azure 文件存储目录 请让我知道您的输入 我
  • WPF 组合框数据绑定所选项目

    我正在尝试数据绑定ComboBox到一个列表strings 到目前为止 我已经得到以下内容 在我看来 我有
  • 使用 Douglas Crockford 的函数继承在 Javascript 中调用基本方法

    基本上如何使用下面的模式调用基本方法 var GS GS baseClass function somedata var that that data somedata Base class method that someMethod f
  • 适合初学者的 Java 编程 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 Firebase 登录多个社交服务?

    我希望用户能够使用多个不同的身份验证提供商 例如 Facebook Twitter 或 Github 对我的 Firebase 应用程序进行身份验证 经过身份验证后 我希望用户无论使用哪种身份验证方法都可以访问同一帐户 换句话说 我想将多个
  • 获取多行并存储在 1 个变量中 - ORACLE 存储过程

    我正在研究 ORACLE 存储过程 我有一个疑问 我有一个查询 它获取超过 1 行 我想将所有这 3 行的值存储在 1 个变量中 有人可以帮我解决这个问题吗 我的查询是这样的 SELECT STUDENT NAME FROM STUDENT
  • Magento 网格问题

    谁能给我指出如何在 Magento 网格中保存可编辑列的正确方向 我有一个名为 sort order 的列 其中有 editable gt true 它添加了一个要编辑的字段 但如何使其将值保存到行中 预先感谢您的帮助 这是我的 grid
  • IE9 Javascript 引擎(代号“Chakra”)的 ProgId 或 CLSID 是什么

    使用 NET 我可以编写一个应用程序 该应用程序托管符合 Microsoft 的 IActiveScript 约定的脚本引擎 这包括 Microsoft 的 JScript 和 VBScript 以及 PerlScript RubyScri