Windows 找出它是否是本地机器

Windows 找出它是否是本地机器,windows,delphi,delphi-7,firebird,Windows,Delphi,Delphi 7,Firebird,我在我的应用程序中有一个实现,只有当我的可执行文件与数据库在同一台机器上时,它才应该运行 我有一个包含服务器地址的连接字符串。在这种情况下,本地机器可能是127.0.0.1、localhost或其他东西(例如别名) 有没有一种方法可以断言地测试我的连接字符串中的服务器是否恰好是本地计算机?只需将连接中的数据库IP地址设置为127.0.0.1即可。如果它失败了,那不是本地机器 注意:如果在承载数据库+数据库未正确配置的计算机上执行代码,此操作也可能失败…强制执行本地传输协议(请参阅)将强制进行本地

我在我的应用程序中有一个实现,只有当我的可执行文件与数据库在同一台机器上时,它才应该运行

我有一个包含服务器地址的连接字符串。在这种情况下,本地机器可能是127.0.0.1、localhost或其他东西(例如别名)


有没有一种方法可以断言地测试我的连接字符串中的服务器是否恰好是本地计算机?

只需将连接中的数据库IP地址设置为127.0.0.1即可。如果它失败了,那不是本地机器


注意:如果在承载数据库+数据库未正确配置的计算机上执行代码,此操作也可能失败…

强制执行
本地传输协议(请参阅)将强制进行本地连接

请注意,FireBird 2.0将
本地传输协议的底层实现更改为。
不过,您不应该注意到任何差异

注意:对于InterBase 6.0及更低版本,不要尝试混合使用
TCP/IP
local transport protocol
,因为其中的错误可能导致数据损坏。
把这两者和Firebird混合在一起就可以了


--jeroen

对于一种完全不同的方法:

在数据库中创建两个存储过程

  • 返回运行数据库的机器本地文本文件的(可配置的)完整文件路径的程序
  • 将一些传入的文本写入此文件的人
在您的应用程序中:

  • 调用返回文件名的存储过程
  • 在运行可执行文件的计算机上删除该文件
  • 调用写入文件的存储过程并向其提供一些唯一的文本(最好是每次调用存储过程都是唯一的)
  • 检查是否可以从本地位置读取该文件,以及该文件是否包含您馈送到存储过程的文本

只需注意驱动器映射(因此检查返回文件名中的驱动器是否为本地驱动器,而不是映射的驱动器)和unc文件名(检查机器名是否与本地机器名相同)。

您好,Ricardo,如果目标IP与loca主机相同,您可以在应用程序尝试连接到数据库时进行检查,例如192.168.10.20、10.10.12.1等等。你明白了。如果在数据库不是本地的情况下运行这段代码会发生什么?它崩溃了?或者它暴露了你不想暴露的东西?还是…?@Martinho Fernandes:跑步需要永远的时间。如果是本地的,则需要2-3分钟;如果不是本地的,则需要2-3小时。如果你的意思是你的应用程序应该只在连接到本地数据库时运行,为什么服务器地址是可配置的?简单的解决方法:
ssh someotherhost-L 3050:localhost:3050
将所有流量从127.0.0.1:3050转发到someotherhost:3050-但是服务器似乎在本地主机上(并且可以访问)。我不确定这是否可以避免,因为还有很多其他方法可以进行这种隧道挖掘。@David Heffernan我没有说我的hole应用程序应该只在本地运行,我的应用程序中有一个实现应该只在本地可用。为了确保问题不会模棱两可,我将对其进行编辑。@Ricardo当您得到“我的应用程序中只有本地可用的一个实现”时,请始终连接到环回。不要连接到环回,因为它可以重新路由;使用本地传输协议。