我在使用 regasm.exe 注册的 dll 中有一个 C# COM 对象。我在 COM 对象上执行 createObject 操作,并在使用 cscript 运行的 vbs 脚本中调用该对象的方法。
如果我在命令行上运行它,它一切正常,创建对象通过 com.
cscript.exe c:\mypath\myvb.vbs argument
Run Code Online (Sandbox Code Playgroud)
我现在尝试从 C# 运行相同的命令。我使用 System.Diagnostics.Process 方法
ProcessStartInfo si = new ProcessStartInfo();
si.Filename = "cscript.exe";
si.Arguments = "c:\mypath\myvb.vbs argument";
Process exe = ProcessStart(si);
...
Run Code Online (Sandbox Code Playgroud)
当我以这种方式运行时,出现 0x80070002 错误,这基本上是一个文件未找到错误。我不明白为什么它与 C# 和命令行不同。
编辑 - 更多信息
我正在 64 位操作系统上运行。C# COM dll 是使用“AnyCPU”构建的。我用的是64位regasm。我使用的cscript来自c:\windows\system32,所以它是64位版本。
在命令行中,如果我故意使用 32 位版本的 cscript,我也会收到 0x80070002 错误。这让我怀疑 c# 的问题是相关的,但我仍然不明白。