2

Delphi 7プログラムの個別のバージョンが、さまざまなサーバーに展開されています。報告されたエラーのトラブルシューティングを支援するために、プログラムが実行されているサーバーを識別する関数を作成しようとしています。

次のコードは、ローカルコンピューター名を取得します。

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

プログラムの絶対パスが次のとおりであると仮定します。

\\Swingline\Programs\Folder\Program.exe

Server: Swinglineどのコンピューターから実行されているかに関係なく、どうすれば元に戻すことができますか?

4

3 に答える 3

4

おそらくApplication.ExeNameを使用して、スラッシュで分割し、2番目の要素を取得できます...

于 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 に答える