2

我们有一个在 Windows XP 上运行的 Visual Basic 6 应用程序套件,它使用一个共享的 DLL 组件——一个登录窗口——它是一个 ActiveX EXE。此登录窗口与调用它的应用程序是分开的。

如果我启动使用登录屏幕的应用程序,并保持登录屏幕处于打开状态(不要输入用户凭据),然后以其他用户身份启动另一个应用程序(右键单击“运行方式...”),在第一个用户关闭登录屏幕或输入他们的凭据之前,应用程序的第二个用户实例不会启动。

如果我先启动登录 ActiveX EXE,然后启动调用它的应用程序,我不会遇到阻塞问题。

这是正常行为吗?两个单独的用户以这种方式运行应用程序是否存在问题?我不明白为什么第一个用户会话会阻止第二个用户会话。

4

2 回答 2

1

ActiveX EXE 类可以编译为允许多个或单个实例。

我猜这个组件处于单实例模式,并为登录生成一个模式对话框。

我不确定“多个实例”是否涵盖了多个用户下的 AxEXE 进程,但它可能只是检查另一个实例,再加上模式对话框不允许线程通过该类运行以进行实例检查,导致阻塞。

于 2013-06-27T21:36:13.227 回答
0

如果没有更多细节,我们所能做的就是猜测。

一种可能性是您的 ActiveX EXE 被编写,以便其客户端在其中创建某个类的实例,然后在此调用方法以显示登录表单。是否有可能此类的每个实例都尝试使用您的登录表单的相同预声明实例?

当您定义一个表单时,您会得到两件事,一个可以创建实例的“表单类”和一个具有相同名称的该类的“免费”全局预声明实例。

您可以尝试在连接器类中创建表单的新本地实例并使用它。然后每个客户都有自己的副本。

于 2013-06-28T06:58:28.067 回答