【问题标题】:Is it possible to harness an application without COM?是否可以在没有 COM 的情况下利用应用程序?
【发布时间】: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 中实例化应用程序。

标签: c# vba shell com


【解决方案1】:

既然应用是你的,你能做的最简单的事情就是把你的应用分成两个项目;一个DLL和一个EXE项目。让 EXE 项目为所有功能引用 DLL,并使 DLL COM 可见,然后只需从您的 COM 应用程序中引用该 DLL。

如果它是一个共享进程,那么将其作为服务而不是 .exe 运行可能会更简单。

【讨论】:

  • 我今天早些时候也试过这个 - 所以我可以让 .dll 的引用在 VBA 项目中正常工作,但不知道如何创建 .exe 的实例,然后使用所有方法在.dll中!?我一定错过了一些非常简单的东西!
  • @jamheadart 两个项目在同一个解决方案中,让可执行项目引用类型库项目
  • 我会再试一次,老实说,当我破解它时,我会因为让它变得如此复杂而自责。
  • 实际上我不确定这对我的问题是否有意义。即使我可以通过类库在应用程序中公开一些方法,我如何特别从 URL 创建应用程序的实例?例如。对于 MSWord,我写“x = New Word.Application”,但对于我的 .exe,我想要“x = New MyApp("locationOfExe")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
  • 2020-03-24
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
  • 2021-07-07
  • 2018-03-13
相关资源
最近更新 更多