【问题标题】:Detect if my application is running under the IDE "Delphi 2007 .Net"检测我的应用程序是否在 IDE “Delphi 2007 .Net”下运行
【发布时间】:2009-06-29 10:46:08
【问题描述】:

如何检测我的应用程序是否在 IDE“Delphi 2007 .Net”下运行,是否有类似 DebugHook 的东西?

再见。

【问题讨论】:

  • 那个“再见”。

标签: delphi delphi-2007 delphi.net


【解决方案1】:

回答我自己的问题。

uses System.Diagnostics; 

function IDEDelphiNetRunning:Boolean; 
Begin 
Result:=Debugger.IsAttached; 
End; 

对我来说很好。

再见。

【讨论】:

  • 所以这将检测​​ IDE 是否附加到进程,但如果黑客将进程 CPU 模式切换为调试则不会?
【解决方案2】:

IsDebuggerPresent() WinAPI 调用。

【讨论】:

  • 但这并不是问题的真正答案,因为无法通过这种方式区分在 Delphi 下运行应用程序和在任何其他调试器下运行它。也许这对 OP 来说并不重要,但这个问题当时的措辞应该不同。 System.Diagnostics中还有Debugger.IsAttached,无需调用Windows API。
【解决方案3】:

类似:

Function IDEIsRunning : boolean;
begin
  result := DebugHook <> 0;
end;

可能适合。

【讨论】:

  • Alister,DebugHook 在“Delphi 2007.Net”中不存在,所以寻找一些替代方案。
  • 嗯,我正在寻找如何做与 OP 完全相同的事情......但在 Delphi 5 中。所以自然这对我来说非常有效。 :) +1
【解决方案4】:

JEDI JclDebug.pas 单元包含以下内容:

function IsDebuggerAttached: Boolean;
var
  IsDebuggerPresent: function: Boolean; stdcall;
  KernelHandle: THandle;
  P: Pointer;
begin
  KernelHandle := GetModuleHandle(kernel32);
  @IsDebuggerPresent := GetProcAddress(KernelHandle, 'IsDebuggerPresent');
  if @IsDebuggerPresent <> nil then
  begin
    // Win98+ / NT4+
    Result := IsDebuggerPresent
  end
  else
  begin
    // Win9x uses thunk pointer outside the module when under a debugger
    P := GetProcAddress(KernelHandle, 'GetProcAddress');
    Result := DWORD(P) < KernelHandle;
  end;
end;

【讨论】:

  • 问题是专门针对“Delphi 2007.net”调试器,而不仅仅是任何调试器。
【解决方案5】:

我从embarcadero找到了这个更通用的答案

使用IsDebuggerPresent() WinAPI 调用。 C++ 中的示例:

if (IsDebuggerPresent())
    Label1->Caption = "debug";
else
    Label1->Caption = "no debug";

【讨论】:

    【解决方案6】:
    function IsDebugMode():Boolean;
    begin
      Result:=False;
     {$IFDEF DEBUG}
      Result:=True;
     {$ENDIF}
    end;
    

    【讨论】:

    • 这不会告诉你是否在调试器下运行。它只是告诉您是否在编译时定义了 DEBUG。所以你发布了一个完全不正确的答案来回答一个已经有多个正确答案的 6 年老问题。
    猜你喜欢
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 2013-07-13
    相关资源
    最近更新 更多