我们在所有客户的本地C驱动器上安装了VB6程序,以及相关的VB6 DLL程序。该程序是在我90年代之前写的。它的设计目的不是要在服务器上运行,也不是为了允许多个用户同时访问同一个EXE,因此不能将它放在每个人的C驱动器上。但是,它的所有正在运行的会话都通过ODBC引用不同SQL Server上的同一数据库源。数据库连接正常。
好吧,现在所有人都可以远程工作(Covid19),在没有本地安装EXE / DLL的计算机上(混合了他们的个人笔记本电脑,服务器,台式机,移动设备,您都可以!)。
[Today],我们的客户都在家里工作,并且正在通过RD Web迁移到虚拟服务器。只要他们运行此EXE和相关的DLL,就只有第一个运行它的人has it。所有其他用户都得到一个VB6违规错误,并且程序崩溃。
DLL在Computer\HKEY_CLASSES_ROOT\
和Computer\HKEY_LOCAL_MACHINE\SOFTWARE\
中都注册了,但没有在LOCAL_USER
中注册,我认为对于使它成为服务器环境中的多用户程序是必需的。
转换应用程序不是一种选择,因为我们没有VB6编译器。我们是否需要将DLL包装在RD-WEB服务器中的“某物”中(是的,服务器上仅存在该程序的一个副本)?
任何有关如何使该旧版程序为多个用户运行的想法,都值得赞赏。
谢谢
尝试在每个用户文件夹(例如主文件夹和指向这些HOME目录的快捷方式)中安装/复制VB程序和相关DLL。如果程序运行,则应该以相同的方式更新数据库。有时,大多数解决方法都很简单。如果他们需要不同的锁定的DLL工作空间,则给他们提供(以后可能会遇到内存问题)
请看这里https://stackoverflow.com/a/345154/12011019
和
某些DLL并非设计为共享的,并且不重新编程就无法修改此行为。有进程内和进程外(线程)DLL。否则可能会有许多其他问题。如果它不起作用,则设计不允许。
在系统范围内使用的共享DLL没有此限制,因为它们被设计为可被许多应用程序使用。请尝试对此行为发表评论。