【问题标题】:Can't access midiox COM interface from other folders无法从其他文件夹访问 midiox COM 接口
【发布时间】:2015-01-14 16:50:44
【问题描述】:

我有一个使用 midiox COM 接口的脚本,当它位于 midiox 安装路径的“WSH”文件夹中时,它工作正常,但是当我将此脚本移动到我的文档中的文件夹时(所以我可以添加它到我同步的文件),突然出现我无法访问 COM 接口了,因为现在获取 mox 变量(主要的 midiox 对象)会导致错误:

Could not create object named "Midiox.MoxScript.1".

指的是脚本中的这一行:

var mox = WScript.CreateObject("Midiox.MoxScript.1");

我尝试将 midiox 安装路径中的所有文件复制到“我的文档”(保持相同的文件夹结构),但仍然出现此错误。

编辑 15-01-14:

为了消除由于未在 32 位模式下运行 cmd 提示符或 cscript.exe 导致的可能性,我编辑了我的批处理文件,如下所示:

@echo off
set "SystemPath=%windir%\sysWOW64"
ECHO inside LAUNCHPAD_Polling_14-09-14
ECHO.
:RELOAD_SCRIPT
C:\Windows\SysWOW64\cscript.exe C:\Users\Chris\Documents\MEGA\repos\LP_DJM_Script\LAUNCHPAD_Polling_14-09-14.js
ECHO.
ECHO.
:PROMPT
set /p UserInput= Press "Enter" to reload. ("n" to exit)
IF "%UserInput%"=="n" (
    GOTO :EXIT
) Else (
    GOTO :RELOAD_SCRIPT
)
:EXIT

我仍然遇到同样的错误。

【问题讨论】:

    标签: batch-file com wsh


    【解决方案1】:

    据我所知,该组件是 32 位进程内组件,需要您运行 32 位应用程序才能创建它的实例。

    您正在运行 64 位版本的 cscript.exe (C:\Windows\System32\cscript.exe),而不是 32 位版本 (C:\Windows\SysWOW64\cscript.exe)。

    如果您从 cmd.exe 运行,则运行的 cscript.exe(不提供完整路径)是您正在运行的 cmd.exe 的位数之一。因此,如果您从批处理文件执行脚本,则可以改为运行 32 位版本的 cmd.exe。

    【讨论】:

    • 请注意,您对 %SYSTEMPATH% 的更改几乎是无害的,因为在没有完整路径的情况下调用 cscript.exe 时最重要的是 %PATH%。无论如何,我重新阅读了你的问题,它似乎只与当前路径有关,而不是处理位数,除非你没有提供足够的细节。
    • 我设置路径的原因是尝试让 32 位版本的 cmd 运行......老实说,我不确定我是否完成了(以防有任何影响) )。是的,当前路径似乎正在对这个脚本做一些事情......并且知道什么。为什么这个变量可以在位于 Program Files(x86) 的文件夹中访问,但不能在我的文档中访问?感谢您迄今为止的帮助,谢谢。
    • 您必须预先启动正确的 cmd.exe,设置环境变量不会改变您正在运行的版本。无论如何,我认为你需要联系组件的作者或维护者来帮助你。
    • 是的,我确实联系了作者,但他们没有回复我:\ 我想也许熟悉 COM 的人可以快速解释这一点,但也许它是特定于组件的?我试图确切地找到如何设置哪个 cmd.exe 由批处理文件运行,并且设置路径似乎是正确的方法......我会寻找一个替代方案,以便我可以排除这种情况。感谢您的帮助。
    • 如果您使用的是 64 位客户端,那么您仍然可以加载 32 位 COM 对象吗? (Windows会在另一个进程中为其创建一个32位的单元,然后进行跨单元通信)。
    【解决方案2】:

    我明白了。我已将 cscript.exe 的副本放在脚本文件夹中并将其设置为“以管理员身份运行”,因为当从 system32 目录调用 cscript 时,我无法弄清楚如何让 cscript 以管理员身份运行。但是当我将所有文件复制到另一个目录时,cscript.exe 的副本并没有自动将自身设置为“以管理员身份运行”——这拒绝了我对 midiox COM 接口的访问。

    【讨论】:

    • 为什么会有cscript.exe的副本?
    • 所以我可以将其设置为以管理员身份运行.. 似乎比试图弄清楚如何让 windows 来做到这一点更容易......但我可能错了。
    • 您也可以创建一个以管理员身份运行的 C:\Windows\SysWOW64\cmd.exe -c 的资源管理器快捷方式。该复选框位于单击快捷方式的“高级...”按钮时出现的对话框中。它的子进程(例如 cscript.exe)将使用相同的凭据运行,因此您不必设置以管理员身份运行作为兼容性 shim。顺便说一句,那个反对票不是我的。
    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 2010-09-30
    • 2021-01-24
    相关资源
    最近更新 更多