【问题标题】:Scripting engine host for applications应用程序的脚本引擎主机
【发布时间】:2010-10-01 01:40:29
【问题描述】:

我们有一个应用程序,它在某些时候需要执行“任务”才能完成一些工作。这些任务目前只是命令(阅读:狡猾的 VB 脚本)被触发,然后监视进程是否完成或如果“超时”则中止,但是我们对执行没有足够的控制权。

我想集成一个脚本引擎或脚本主机,以使我们能够在我们的应用程序中执行脚本(如果可能的话,在另一个应用程序域中)并保持对它们的一些控制。我设想我们的脚本遵循类似于以下界面的脚本:

void Initialize();
void Destroy();
void Execute();
void Abort();
int GetProgress();

当然,上面的内容可能不是代码中的内容,但是您明白了...基本上从我们的应用程序中,我们可以调用Initialize,然后调用Execute,轮询GetProgress,直到返回值是 100 或其他值,然后在最后调用 DestroyAbort 然后 Destroy 如果我们需要取消或超过超时期限。

脚本需要能够做的主要事情是 AD 查询,并与 Shell 交互(例如,映射网络驱动器或断开连接)。

我已经研究了一些选项来执行此操作 - 我已经实现了一个使用 Boo 作为语言的原型,并且本质上是动态加载脚本以在内存中作为“程序集”进行编译和执行。我喜欢它的工作方式,但我不确定它不是“众所周知”的语言等会被接受的程度如何。

我正在考虑的其他选项是 Python (IronPython)、Ruby (IronRuby)、PowerShell,也许还有 VB,但我不确定用 VB 实现的难易程度。

有任何意见、cmets、建议甚至资源可以为我指明正确的方向吗?

【问题讨论】:

    标签: scripting


    【解决方案1】:

    Lua 专门设计用于嵌入到应用程序中。它是一种非常简洁高效的语言,这并没有什么坏处。

    【讨论】:

    • Lua 是否支持 shell 和 AD 交互?我在他们的网站上看不到它...
    • 有一些库可以访问 DOM 资源,我想这是最简单的。另一方面,C API 非常简单,将这个功能添加到您的主应用程序并将其公开给 Lua(不一定是 GUI)可能会更简单。
    【解决方案2】:

    这不是很令人兴奋,但我会考虑使用内置的脚本托管支持。我曾经在 Native C++ 中毫无问题地执行此操作,而 .Net 似乎在 http://msdn.microsoft.com/en-us/library/ms974577.aspx 处包装了相同的东西(承认文章是旧的)@

    【讨论】:

    • 谢谢 - 我看过使用 Vsa 命名空间,但似乎它们已被弃用,取而代之的是 CodeDom 等......然后它就变得复杂了。
    【解决方案3】:

    如果您希望其他人为您的系统编写脚本,那么 PowerShell 可能是一个不错的选择。根据我的观察,人们对学习 PowerShell 的抵抗力不如对学习 Python 的抵抗力。这可能是因为 PowerShell 带有 Microsoft 的批准印章。在 Microsoft 商店中,Python 可能被视为过于异国情调,而 Ruby 更是如此。

    很容易证明,Microsoft 世界中的每个人(无论是程序员、QA 人员、支持人员还是高级用户)都将从学习 PowerShell 中受益。很容易证明学习 PowerShell 符合他们自己的利益。 cmd.exe 将过时。每个人迟早都会学习 PowerShell。

    这就是为什么我认为 PowerShell 将是一个不错的默认选择。

    当然,很大程度上取决于特定要求。

    一个好的测试可能是用每种候选语言编写一个典型的脚本,看看哪一种最自然。听起来 PowerShell 很适合您的描述。但如果脚本非常“算法”,那么 Python 或 Ruby 会更好。如果速度是一个要求,我相信 IronPython 比 PowerShell 快得多。 (我不知道 IronRuby。)等等。

    更新:我刚刚有了一个深刻的想法 :) 嵌入式脚本语言是用户界面的一部分。也就是说,这是一个 UI 问题。您应该从用户的角度选择使用哪一种。

    【讨论】:

    • 感谢您的建议,但是由于环境限制(COE、Windows XP 等),我们无法使用 PS,主要是因为 PS 不是基本操作系统构建的一部分,安装该依赖项将是对于平台人来说是一个巨大的痛苦。这些脚本实际上也不是用于 UI,它们是为“管理员”类型的员工编写任务,然后在标准用户机器上执行的……想想登录脚本,但不是……
    • 我的意思是 UI,因为它是脚本编写者和管理员用户界面的一部分。我不是指 GUI。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    • 2011-02-27
    • 2012-06-06
    • 2011-01-28
    • 1970-01-01
    • 2017-01-08
    相关资源
    最近更新 更多