如何动态改变ActiveForm的GUID

百分百好牛 2004-07-19 01:16:06
公司用delphi做了一个B/S结构的商业系统,客户端和服务器端都用了ActiiveForm,因此都具有GUID.
现在服务器和客户端都运行良好.可是用户有一个特殊的需求,要求在物理服务器上(比如P4的机器),安放两个版本的应用服务器(比如:V1.2和V1.3)版本.
大家都知道,在delphi中设计应用服务器时,它是有一个GUID的,编译好了后,当应用服务器在服务器机器上第一次运行时,就会将自己的GUID注册到系统的注册表中.可是GUID是在设计时生成的,因此,客户在连接到服务器时,肯定都是连接到同一个应用服务(即同一个版本的).
现在我们提出的解决方案是,用delphi打开应用服务器程序,修改GUID,再Build一次,这样,两次Build的版本的应用服务器的GUID是不同,同时,对客户端的ActiveForm的GUID也修改,并重新编译.
还没有正式做,不过,初步方案是这样子.

但是,我总觉得不妥,有没有更好的解决方案呢?
希望集思广义,谢谢大家.

...全文
143 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
百分百好牛 2004-07-21
  • 打赏
  • 举报
回复
yinweixian 2004-07-20
  • 打赏
  • 举报
回复
不知道,顶把
百分百好牛 2004-07-20
  • 打赏
  • 举报
回复
initialization
TComponentFactory.Create(ComServer, TNHS_DM,
CLASS_NHS_DM , ciMultiInstance, tmApartment);

请问,可不可以动态改变CLASS_NHS_DM的值呢?
百分百好牛 2004-07-20
  • 打赏
  • 举报
回复
没有人知道吗?
自顶
百分百好牛 2004-07-20
  • 打赏
  • 举报
回复
我试了另外一个方法,把服务器端的ActiveXForm的GUID重新生成,而且datamodul的名称也改变了。重新编译成一个版本,我称之为SB(以前的那个为SA)
然后同样,把客户端版本的TSocketConnection 的ServerName也改为SB中的名称。重新编译为CB,原来客户端为CA。
根据我的设想,因为GUID和名字都不一样,SA和SB应该为两个不同的应用服务器,CA应该连到SA,CB应该连到SB。
测试如下:
1,先启动SB,然后启动CB,此时正常登录,在SB中,也显示出CB登录。再启动SA,启动CA,此时,却发现CA登录到SB上去了,SA上没有显示有用户登录.
2,直接启动CB,此时,激活SB,SB上显示CB登录;再启动CA,此时,SA也被激活,可是,用户却登录到SB上去了,没有登录到SA上。

哎,不明白是怎么回事,搞昏了。
明天就要交了,可是我还没有搞定.
请大家帮忙啊。
谢谢先!
百分百好牛 2004-07-19
  • 打赏
  • 举报
回复
我有个想法.就是给应用服务器增加一个配置文件,通过参数决定在启动时,是否改变原来的GUID.不改变,则直接启动运行,若设置为改变,则重要生成一个GUID,并注册,然后启动(但是这样一来,也有一个问题,如何让客户端识别这个新生成的应用服务器)

我还不知道这样行不行.
说出来,大家讨论一下.

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧