【发布时间】:2018-10-26 17:19:19
【问题描述】:
我创建了一个托管在安全共享点上的 .Net 应用程序。我希望能够通过 VBA(或其他应用程序)运行此应用程序。
通过昨天的询问和研究,我发现通过Shell filePath, vbNormalFocus 很容易做到这一点 - 我什至可以将参数传递给应用程序,但我真正想要的是控制应用程序作为一个对象,类似于控制一个 COM目的。经过今天的研究和很多困惑,我发现我不能使用 COM,因为这不是一个类库 - 它是一个 .exe 应用程序(虽然我今天学到了很多东西!)
想象一下这种交易:
Dim x as Object
Set x = Shell "filePath", vbNormalFocus
x.NotSureHowThisWorks
我想在我的 Excel 环境中启动应用程序,并多次调用应用程序并从应用程序发出指令。调用可以是字符串或其他任何内容,但重点是我需要将正在运行的应用程序耦合到 VBA 代码中的对象变量,以便我可以重复调用并接收响应。
这可能吗?
【问题讨论】:
-
如果您想象自己编写了“MS Word”,并通过 VBA 从 Excel 控制它,更改其标题、写入和读取,这会是您问题的答案吗?
-
我不知道 MS 应用程序是如何工作的。它们安装在用户的计算机上,并且库都托管在用户的计算机上。我可以创建类库并通过安装程序将它们安装到用户的计算机上,但我无法为应用程序创建 COM 互操作性,更不用说在线托管了?有什么方法可以让我从在线 URL 实例化一个 .exe 应用程序,但具有 COM 互操作性?
-
听起来您想像对待引用类型库一样对待 exe。你不能这样做,.exe 正在它自己的单独进程中运行。
Shell调用只是调用命令行入口点。现在,最后一条评论改变了一切。如果应用程序不是本地 .exe 而是一些沙盒 Web 应用程序,那么您需要查看它是否具有 API,如果没有,则需要查看浏览器自动化。对于截然不同的事物,采用截然不同的方法。请澄清“应用”代表什么。 -
该应用程序是我在 SharePoint Online 上托管的 .exe。我没有能力托管 Web 服务或 Web 应用程序。我实际上是在部署给用户的 excel 中从 vba 调用在线 .exe(具有服务器连接性)。
-
使您的 .net 应用程序 COM 可见并公开 COM 可见入口点,注册 COM 互操作以进行后期绑定,在 VBA 中实例化应用程序。