2

Delphi 7 程序的不同版本已部署在各种服务器上。为了帮助解决报告的错误,我正在尝试编写一个函数来识别程序从哪个服务器运行。

以下代码为我获取本地计算机名称。

sbAll.Panels.Items[1].Text := 'Server: ' + GetEnvironmentVariable('COMPUTERNAME');

假设程序的绝对路径为:

\\Swingline\Programs\Folder\Program.exe

Server: Swingline无论它是从哪台计算机上运行的,我如何让它返回?

4

3 回答 3

4

您可能可以使用 Application.ExeName,用斜杠分割它并获取第二个元素......

于 2013-03-08T01:05:28.950 回答
1

这是我根据@Zdravko 的建议最终使用的代码。

List := TStringList.Create;
try
  ExtractStrings(['\'], [], PChar(Application.ExeName), List);
  if (List.Text[2] = ':') then  // On local computer, Ex. J:\Programs\Foo.exe
    sbAll.Panels.Items[1].Text := 'Server: ' + ntComputer.ComputerName
  else   // In the case of \\Swingline\Programs\Folder\Program.exe
    sbAll.Panels.Items[1].Text := 'Server: ' + UpperCase(List[0]);
finally
  List.Free;
end;
于 2013-03-08T01:36:37.563 回答
0

您可以在不使用字符串列表的情况下执行此操作...

function ExeLocation: String;
var
  S: String;
begin
  S:= ParamStr(0);
  if Copy(S, 2, 2) = ':\' then begin
    Result:= GetEnvironmentVariable('COMPUTERNAME');
  end else
  if Copy(S, 1, 2) = '\\' then begin
    Delete(S, 1, 2);
    Result:= Copy(S, 1, Pos('\', S)-1);
  end;
end;

请记住,如果您通过机器的 IP 地址引用文件,则只会返回 IP 地址。例如\\192.168.1.123\SomeFolder\SomeFile.exe只会返回192.168.1.123. 我寻找了其他方法,但我对该部门的知识不够深入,无法深入挖掘真正的机器名称。这可能是可能的,但我只是不认为它是可能的。

于 2013-03-08T06:27:50.593 回答