问题标签 [applicationdomain]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1189 浏览

c# - 防止堆栈溢出异常崩溃进程

假设我有一个应用程序,用户可以在其中提供用 JavaScript 编写的脚本来执行某些任务。这是使用 Jint 完成的。然而,写得不好的脚本可能会导致堆栈溢出异常,JintEngine.Run()从而导致整个应用程序崩溃。我宁愿通知用户脚本中的错误。

我试图在另一个应用程序域上运行 Jint,但没有帮助,导致 SOE 上的 AFAIK 默认操作正在退出进程。除了使用 CLR 托管之外,它还能以其他方式进行更改吗?

我知道我可以运行单独的进程,这是我的后备方案,但我不想这样做。

0 投票
1 回答
944 浏览

.net - 构成进程、应用程序域、上下文和线程的不同“组件”是什么(以及它们的关系是什么)?

我真的很希望能得到一个明确的答案。

我有一个之前的问题,我问过“什么是线程(真的)?” 我得到了一些非常好的答案,我从中得出的结论是一个线程是:

线程是处理器寄存器的一组独立值(对于单个内核)。由于这包括指令指针(又名程序计数器),它控制以什么顺序执行的内容。它还包括堆栈指针,它最好指向每个线程的唯一内存区域,否则它们会相互干扰。

IE

线程并不比一组寄存器值更“具体”

CPU 寄存器的确切列表取决于架构,但指令指针和堆栈指针几乎是通用的。他们定义了一个线程,当这个线程(一组寄存器值)被加载到处理器内核中时,线程正在运行。处理器正在获取线程所需的指令并更新线程寄存器。当需要上下文切换时,处理器将这组寄存器值保存到内存中,并加载属于不同线程的一组值,通常作为中断服务逻辑的一部分。

此外,我了解线程具有 TLS(线程本地存储)和它们自己的调用堆栈。

所以重申一下,为了澄清我的问题,线程的组件(正如我在标题中提到的)是寄存器值、它的 TLS 和它的调用堆栈。我想知道我的标题中其他项目的组成部分(进程、应用程序域和上下文)。

这是我正在阅读的书中的图表(Pro C# 2008 和 .NET 平台)

Win32 进程/线程关系

我了解此图与 Win32 进程有关,但我认为相同的 TLS,调用 Stack 想法适用于 .NET。此外,我认为如果该图包含定义这些线程(A 和 B)的寄存器值(或指示存在寄存器值的东西),它会更好。

现在我正在继续我的调查,我只想一次问这个问题。我想知道进程、应用程序域和上下文的相同信息(这是我理解为托管“层次结构”的顺序,即进程托管应用程序域、应用程序域托管上下文、上下文托管线程)。

我的最终目标是获得足够的信息,以便我可以绘制所有这些实体(或任何实体)之间的关系,以及实际构成它们的组件(例如,在线程的情况下,有寄存器值、TLS、并调用实际上组成它们的堆栈)。当我这样做时,我会将这个问题的图表作为最后的编辑发布。现在,这是我正在阅读的书中的图表(关于进程、应用程序域和上下文):

进程、应用程序域和上下文边界

PS如果有人知道那里已经解释了所有这些的图表,我很乐意看到它。如果不 。. . 为什么没有一个?

编辑:这是我到目前为止的图表

进程、应用程序域、上下文和线程 - 组件及其关系

0 投票
1 回答
1366 浏览

actionscript-3 - AS3 Loader 的 unloadAndStop 奇怪行为

我知道 AS3 加载器的类 unloadAndStop() 假设在我加载一个 SWF 阶段时卸载并停止所有内容,但它是否也会更改库中的对象(即使它们不在舞台上?)。

我将描述我的问题以解决它:我正在将 SWF 动态加载到我的 AS3 应用程序中,并使用 applicationDomain 和 getDefinition 从它们中提取所需的符号。我正在加载的 SWF/FLA 阶段是空的,我所拥有的只是库中导出的符号。

当我加载其中具有预编译剪辑的符号时会发生问题(在我的情况下,是 Partigen 发射器,但我认为这并不重要),它可能具有事件侦听器或计时器 - 这些剪辑上的代码停止当加载剪辑的父 SWF 的加载程序调用 unloadAndStop() 时,工作和行为很奇怪。我假设 unloadAndStop() 从中删除了所需的事件侦听器,但不知道为什么(同样,它不在舞台上)。

我会编写我自己的 unloadAndStop() 来过滤这些预编译的剪辑或检查那里真正发生了什么,但我很确定 unloadAndStop() 会做一些通过 API 不可用的事情。

什么可以解释这种行为?任何人都可以想到一个可能的解决方案?谢谢你。

0 投票
1 回答
606 浏览

excel - vsto 插件使用 excel 应用程序域

我正在开发 VSTO 2010 excel 插件。在其中一台开发机器上,我安装了插件(已经安装了一些插件)。

我观察到它无法读取配置文件()。发生这种情况是因为插件试图搜索 Excel.exe 所在目录中的配置文件。

将配置文件(重命名为 Excel.exe.config)与 Excel.exe 放在同一目录中时,它工作正常。

可能是在与 excel 相同的应用程序域中加载。但是如何解决这个问题呢?

请回复,

谢谢和问候,迪普特什。

0 投票
2 回答
1031 浏览

flash - Howto:具有自己的自定义 RSL 的 Flex 模块仅加载到子 ApplicationDomain 中?

我有一个复杂的应用程序。我对我的所有库都使用 Flex 4.1 RSL 和自定义 RSL(并且有大约 15 个自定义 SWC - Flex 库项目)

我想用最少的 RSL 加载主应用程序,然后在用户与应用程序的第一部分交互时在后台加载所有其他 RSL 的 Flex 模块。

主应用程序需要 3 个 SWC,模块需要其余的 (12)。

如果我有一个带有 Application.mxml 的 Flash Builder 应用程序项目,其中我链接了所有 RSL(作为 RSL)和 Module.mxml

我该如何解决这个问题,以便将 RSL 与模块一起加载到子应用程序域中?

目前我正在使用:

...所以它应该加载到新的应用程序域中,但 RSL 已经预加载到父域中!.

我在我的模块中使用静态字段/单例,所以我无法加载更多。

如果我可以将带有 RSL 的模块加载到子应用程序域中,类定义就会分开,我可以使用两个模块,每个模块都有自己的静态字段。

0 投票
1 回答
522 浏览

c# - 应用程序域如何用于托管在 Web 或 Windows 应用程序中提供 UI 控件的第 3 方程序集?

MSDN说:

隔离应用程序对于应用程序安全性也很重要。例如,您可以在单个浏览器进程中运行来自多个 Web 应用程序的控件,以使这些控件无法访问彼此的数据和资源。

这将如何实现?如果我在我的 WebForm 上使用来自程序集的控件作为 UI 的一部分,我将如何从单独的域加载它?

此外,这是否可能在 Windows 窗体中,在您的窗体上具有来自单独应用程序域中加载的程序集的 UI 控件?如果是这样,你会怎么做?

我问是因为我使用了许多 3rd 方 UI 控件库。我将如何以“安全”的方式使用这些,从与我的主应用程序不同的应用程序域托管?

0 投票
3 回答
1688 浏览

c# - 在 .net 中实现对 ApplicationDomain-boundary 的回调

我使用 Applicationdomain 动态加载 dll 以在必要时卸载。如果加载的 dll 中的任务自行终止,我无法开始工作的是来自创建的 Appdomain 的回调方法。

到目前为止我有什么

和“初学者”方面

这会导致未找到程序集异常,因为 OnClosedItself() 是一种仅 Starter 知道的类型的方法,它不存在于 appdomain 中。

如果我将 OnClosedItself 包装为可序列化类中的委托,则它是相同的。

有什么建议么?

编辑:我想做的是建立一个自我更新的任务。因此,我创建了一个启动器,如果有新版本可用,它可以停止并重新创建任务。但是如果任务从其他地方停止,它也应该通知启动器终止。

// 从问题中删除了很多临时代码

编辑 2:Haplo 为我指出了正确的方向。我能够用信号量实现回调。

0 投票
3 回答
561 浏览

apache-flex - 强制转换加载到不同应用程序域中的对象时出现类型强制错误

我的应用程序当前包含许多由小部件管理器管理的小部件。当用户点击一个小部件(例如一个 Helper 小部件)时,小部件管理器使用以下代码行将该小部件加载到一个单独的同级应用程序域中:

但是,我以后无法使用小部件的变量和函数。我尝试从小部件管理器的小部件列表中找到 Helper 小部件,并且我成功了。但是,当我尝试将 Helper Widget 从 IBaseWidget 类型(所有小部件共享的接口)转换为 HelperWidget 类型时,我收到以下错误:

TypeError:错误#1034:类型强制失败.....

这是因为尝试使用 Helper 小部件的类的应用程序域与 Helper 小部件的应用程序域不同。我试图通过将所有小部件加载到与加载器相同的应用程序域来解决此问题:

现在,每当我尝试加载 Helper 小部件时,都会收到以下错误:

TypeError:错误 #1009:无法访问空对象引用的属性或方法。

如何将我的 Helper 小部件加载到其他小部件可访问的公共应用程序域中?

0 投票
1 回答
60 浏览

asp.net - asp.net web 应用程序是否被视为在应用程序池中运行的进程?

asp.net web 应用程序(托管在 IIS 中)是否被视为一个进程?

而这个进程在一个应用程序池中。

一个应用域中可以有 1 个或多个应用程序池?

它是否正确?

0 投票
1 回答
1473 浏览

c# - 尝试创建实例应用程序域

我正在尝试执行以下操作:

有什么我做错了吗?我创建成功,但是当我在某些情况下尝试使用 MyClass 的实例时,我遇到了意外的异常。

编辑:找到问题的根源,我一直在使用我在当前应用程序域中加载的 dll 从其他应用程序域中创建实例,这导致了不一致

谢谢你。